回答1.正規表現で name: に続く文字、furigana: に続く文字、postal+code: に続く文字、addres: に続く文字、tel: に続く文字を指定すれば、簡単に1行 単位で個人データを取得できます。 <実行結果> ―――――――――――――――――――――――――――――――――――― 馬場平成 ババヘイセイ 全日本区西側壱拾六問 1-16-521 001-002-003 猪木幹事 イノキカンジ 新日本区卍町鼓舞羅 2-8-8 002-003-004 武蔵形太 ムサシケイタ 巌流島区二刀町大字舟 54 951-248-0003 安堵福子 アンドフクコ 和蘭区編夢捨手新町 2-6-15-501 159-006-0325 小川直美 オガワナオミ 講道館区谷和原町 2-4-9-101 355-820-1955 橋木真也 ハシキシンヤ 三重市隠屋敷南新町 2-821 068-022-4128 ―――――――――――――――――――――――――――――――――――― <プログラム・リスト> ―――――――――――――――――――――――――――――――――――― open F,"meibo1.txt"; while (<F>) { if(/name: /){$a = $'} $a =~s/\n/\t/; if(/furigana: /){$a .= $'} $a =~s/\n/\t/; if(/postal+code: /){$a .= $'} $a =~s/\n/\t/; if(/addres: /){$a .= $'} $a =~s/\n/\t/; if(/tel: /){$a .= $'} push @b, $a; undef $a } open W, ">kekka.txt"; print W @b; ―――――――――――――――――――――――――――――――――――― 【投稿者より】 まるで意図していたものと同じものが、それも、簡潔なperlで書かれていて感動しました。 ありがとうございます。細部の解釈をこれから勉強してみます。 パールがCGIだけに使われると思っている人が多いと思うので、 本来のテキスト処理に便利な道具として、簡単に使える例が多いと助かります。 【管理者より】 $' により、正規表現 /name: / 以降の文字列(行末まで)を取得します。 1人分を1行で定義するため、行末の \n を取り除かなければならないのですが、 各データ区切りをタブ区切り(\t)とするため、数学的には \n と \t のチェンジ (置換)と同等です。 こうして得られた個々のデータを .= による文字列結合(後詰め)によって次々と定義 していけば、1行からなる1人分のデータを取得することができます。 |