• ベストアンサー

perlでのテキスト処理

perlでテキストを読みこんで、csv(エクセル)で表示させるとしますよね? その時に項目A・項目B・項目Cとあったとして表示させる順番を変える事は出来るんですか?? たとえば項目B・項目C・項目Aみたいに…。 今テキストで名簿データを、一部の項目だけ取り込んでエクセルで表示させたいと思っているのですが、 この一部の項目をどう指定したらいいのか分かりません; ソートで出来るんでしょうか…? 初心者だし資料も不足しているので、何かテキスト処理について分かりやすく解説している書籍・サイトなどありましたら、教えて下さい。 文章分かりづらくてすみませんが、お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

他の方のレスにもありますが、 一度配列に読み込んでしまえば あとは順番を入れ替えて出力してやるだけとなります。 ただし、 csvといってもデータそのものに,が含まれている場合は、 単純にsplit/,/では片づけられません。 本来はwin32::OLEなど、 モジュールを使って処理するのが楽であり確実ですが・・ (使いこなすには文献等読まなくてはいけません) >@out_data[0]=sprintf("%s,%s,%s",@parts[0],@parts[2],@parts[1]); $parts[]です。。

paraiso1210
質問者

お礼

お礼のお返事がおそくなりました。 みなさんのお陰でなんとかなりそうです! ありがとうございました。

その他の回答 (2)

  • togino
  • ベストアンサー率75% (97/129)
回答No.2

例えば、下記のような内容のファイルがあったとします。 鈴木,24,東京 山田,31,大阪 佐藤,28,京都 Excel は単純にカンマで区切られたものを左から順に表示するだけなので 順番を変えるためには、ファイルの中身を表示させたい 順に修正しなくてはなりません。 その為、上記のファイルの名簿から 「都道府県名」と「年齢」だけをこの順で表示させたい場合 東京,24 大阪,31 京都,28 という CSV ファイルを作ってあげなくてはなりません。  open(IN, "input.csv");  open(OUT, "> output.csv");  while($line = <IN>){    chomp($line); # 最後の改行取り除く    @lines = split(/,/ , $line); # カンマで区切って配列にする    $line_new = "$lines[2],$lines[1]\n"; # 前から3番目の項目と2番目の項目の順に並び替え    print(OUT $line_new);  }  close(IN);  close(OUT); (↑注:インデントの為、先頭に全角のスペースがあります) 要点は ・ split 関数を使って、カンマで区切って配列に入れる。 ・ 配列の順序を変えて出力する。 初心者なので大変かと思いますが、1冊ほど Perl の 入門書を買われて読まれたらいいかと思います。 頑張ってくださいっ

paraiso1210
質問者

お礼

お礼のお返事がおそくなりました。 みなさんのお陰でなんとかなりそうです! あれから入門書を購入しました…。 ありがとうございました。

  • iichiho
  • ベストアンサー率37% (416/1114)
回答No.1

できます。 例えば、 @data[0]=「住所,電話番号,氏名」 となっているデータを @out_data[0]=「住所,氏名,電話番号」 とする場合は、下記のようにします。 @parts=split(/,/,@data[0]);   #@parts[0]=住所が格納されます   #@parts[1]=電話番号が格納されます   #@parts[2]=氏名が格納されます @out_data[0]=sprintf("%s,%s,%s",@parts[0],@parts[2],@parts[1]); 私が使っている書籍はオライリー社のperlの本の日本語訳くらいです。 あとは、他人のperlのソースを見て考えたりです。

paraiso1210
質問者

お礼

お礼のお返事がおそくなりました。 みなさんのお陰でなんとかなりそうです! ありがとうございました。 他の方のソースも参考に頑張ってみます!

関連するQ&A

専門家に質問してみよう