« 「ご説明します」の「ご」は謙譲語である | トップページ | Norton AntiVirus 2010へ無償アップグレード »

2009年9月14日

人間向きのExcelシートを機械向きに整形するPerlスクリプト

人間が見やすい表、必ずしも機械処理には向かない。Excelに入力したデータをソートやピポットテーブルなどで分析しようとしても、入力フォーマットが人間向きになっていてるためにそれが難しいときがある。典型的なのは、ひとつのExcelシートに複数のレコードフォーマットの行が混在している次のような表だ。

入荷日  数量
製品A 型番1
2009/9/15  200
2009/9/16  100
2009/9/17  100
製品B 型番2
2009/9/12  10
2009/9/14  100

そこで、この表を整形して次のようにレコードフォーマットを統一することを考える。

製品名 入荷日  数量
製品A 2009/9/15  200
製品A 2009/9/16  100
製品A 2009/9/17  100
製品B 2009/9/12  10
製品B 2009/9/14  100

もちろんこの整形を機械的にやるわけで、勉強がてらPerlのスクリプトを書いてみた。骨組みのロジックはこれで十分だ。あとは個別の表に合わせて修正すればよい。Excelシートをタブ区切りテキストにエクスポートしたものが入力ファイルである。

open (IN, 入力ファイル)
print "製品名\t入荷日\t数量\n";

while (IN) {

if (/^製品/) {		#見出しか?
	@line = split(/\t/);		# タブで区切って配列に入れる
	$product = @line[0];		# 配列の最初の要素が製品名
	}
elsif (/^2009/) {	# 入荷日で始まるレコードか?
	print "$product\t$_";		# 見出し以外の列の先頭に製品名を付加して出力
	}

}

|

« 「ご説明します」の「ご」は謙譲語である | トップページ | Norton AntiVirus 2010へ無償アップグレード »

コメント

この記事へのコメントは終了しました。