サンプル:可変長テキストフィールドを処理する
split関数を使用して、フィールド区切り文字に一致するパターンでレコードを分割します。
@fields = split(/区切り文字/, $_); を用いる。
プログラム例では、日本語の固有名詞の漢字、読み、発音をカンマ区切りで表現したファイルを読み込み、split関数を使用して配列化したものを漢字=>読み=>発音のような形式で出力しているプログラムです。下記は、CSV形式で表現されている不定長レコードのデータであるが、これをデータベースにロードするときなどに利用できる、非常に重宝する関数です。
プログラム例
#!/usr/bin/perl
open(FILE_H , "< sample.csv") || die "ファイルオープンできませんでした。\n";
while (<FILE_H>) {
chomp($_);
@fields = split(/,/, $_);
print join("=>",@fields) , "\n";
}
close(FILE_H);
実行結果
[it-engineer@home1 perl]# more sample.csv
美濃赤坂線,ミノアカサカセン,ミノアカサカセン
広見山,ヒロミヤマ,ヒロミヤマ
ファンタスト,ファンタスト,ファンタスト
村碆,ムラバエ,ムラバエ
甲森,カブトモリ,カブトモリ
千葉マリン,チバマリン,チバマリン
小日向山,オビナタヤマ,オビナタヤマ
草尾峠,クサオトウゲ,クサオトーゲ
八神,ヤガミ,ヤガミ
ナカ崎,ナカサキ,ナカサキ
障子山,ショウジヤマ,ショージヤマ
会津長野,アイヅナガノ,アイズナガノ
切ノ鼻,キリノハナ,キリノハナ
天王,テンノウ,テンノー
シリムクリ崎,シリムクリザキ,シリムクリザキ
乙舞峠,オトマイトウゲ,オトマイトーゲ
枕木山,マクラギサン,マクラギサン
茶臼原,チャウスバル,チャウスバル
鷹巣盆地,タカノスボンチ,タカノスボンチ
湯蔵山,ユゾウサン,ユゾーサン
白樺高原,シラカバコウゲン,シラカバコーゲン
引っかけ橋,ヒッカケバシ,ヒッカケバシ
仙山東線,センザントウセン,センザントーセン
イワオヌプリ,イワオヌプリ,イワオヌプリ
油川,アブラカワ,アブラカワ
遠戸島,トオドシマ,トードシマ
猪ノ瀬,イノセ,イノセ
下深川,シモフカワ,シモフカワ
有形山,アリガタヤマ,アリガタヤマ
延方,ノブカタ,ノブカタ
湖尻峠,コジリトウゲ,コジリトーゲ
磯原,イソハラ,イソハラ
福士川,フクシガワ,フクシガワ
[it-engineer@home1 perl]# perl 20070525-1.pl sample.csv
美濃赤坂線=>ミノアカサカセン=>ミノアカサカセン
広見山=>ヒロミヤマ=>ヒロミヤマ
ファンタスト=>ファンタスト=>ファンタスト
村碆=>ムラバエ=>ムラバエ
甲森=>カブトモリ=>カブトモリ
千葉マリン=>チバマリン=>チバマリン
小日向山=>オビナタヤマ=>オビナタヤマ
草尾峠=>クサオトウゲ=>クサオトーゲ
八神=>ヤガミ=>ヤガミ
ナカ崎=>ナカサキ=>ナカサキ
障子山=>ショウジヤマ=>ショージヤマ
会津長野=>アイヅナガノ=>アイズナガノ
切ノ鼻=>キリノハナ=>キリノハナ
天王=>テンノウ=>テンノー
シリムクリ崎=>シリムクリザキ=>シリムクリザキ
乙舞峠=>オトマイトウゲ=>オトマイトーゲ
枕木山=>マクラギサン=>マクラギサン
茶臼原=>チャウスバル=>チャウスバル
鷹巣盆地=>タカノスボンチ=>タカノスボンチ
湯蔵山=>ユゾウサン=>ユゾーサン
白樺高原=>シラカバコウゲン=>シラカバコーゲン
引っかけ橋=>ヒッカケバシ=>ヒッカケバシ
仙山東線=>センザントウセン=>センザントーセン
イワオヌプリ=>イワオヌプリ=>イワオヌプリ
油川=>アブラカワ=>アブラカワ
遠戸島=>トオドシマ=>トードシマ
猪ノ瀬=>イノセ=>イノセ
下深川=>シモフカワ=>シモフカワ
有形山=>アリガタヤマ=>アリガタヤマ
延方=>ノブカタ=>ノブカタ
湖尻峠=>コジリトウゲ=>コジリトーゲ
磯原=>イソハラ=>イソハラ
福士川=>フクシガワ=>フクシガワ
[it-engineer@home1 perl]#

