人間向きの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$_"; # 見出し以外の列の先頭に製品名を付加して出力 } }
| 固定リンク
この記事へのコメントは終了しました。
コメント