- ベストアンサー
外部ファイルから特定の値を取り出して、値ごとに新しいファイルを生成して書き込むには?
こんにちわ。質問させてください。 ひとつのCSVファイルがあります。1列目の先頭の値はランダムねアルファベットです。 aという値が先頭にある列は、a.csvを生成して、a.csvにaの行を書き込みます。b,cも同様にb.csv,c,csvを生成して書き込みます。 要するに一枚のファイルから値ごとに新しいファイルを生成して書き込みをしたいのです。新しくできたファイルは追加書き込みをしないでの上書きモードです。substr関数を使って値を取り出すまではわかるのですが、そこからの処理がわかりません。どうぞ教えてください。よろしくおねがいします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じでいいと思います。 --------------------------------------------- open(DATAFILE, "<", "data.csv"); #元になるファイル while(<DATAFILE>){ #一行読み込み ($fileName, $content)=split(/,/, $_, 2); #分割 open(FILE, ">", "$fileName.csv"); #ファイルを作成 print FILE "$content"; close(FILE); } close(DATAFILE);
その他の回答 (1)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>substr()関数の処理はどこへ書けばいいのでしょうか。 #1のプログラムでは、ファイル名の取り出しは、 >($fileName, $content)=split(/,/, $_, 2); #分割 の部分でやっています。 「$_」にファイルから読み出した1行が格納されて、カンマ(,)で2分割されます。 例えば、 t,Tom ,TOPGUN のようなデータが $fileName="t"; $content="Tom ,TOPGUN"; のように切り分けられます。 >open(FILE, ">", "$fileName.csv"); の部分では、出力用のファイルを作成しています。 実行時に$fileNameが"t"なら、"t.csv"というファイルを作成することになります。 ファイルを作成したら、ファイル名以降の部分は、$contentに入っていますので、そのファイルに書き出すだけです。 >print FILE "$content"; とりあえず、data.csvの部分を実際の元になるファイル名に変更して実行してみて下さい。
補足
ありがとうございます。substr()関数の処理はどこへ書けばいいのでしょうか。 $data=item[0] substr($data,0,1); として、アルファベットが入ってるセルの$dataから先頭のアルファベットa,b,cとかの値を取り出して、aならa.csvを生成して、そのaの行を書き込むというやり方です。この処理は教えていただいた記述の最初にかくべきですか? 具体的にわたしがやりたいのは外人の名前でマイケルジャクソンだったら、頭の文字がmなのでmのファイルを生成して、そこにマイケルジャクソン(正しくは英語で記述)トムクルーズやトムハンクスだったら頭がtの文字なので、t.csvを生成して書き込むというふうにファイルごとにわけることをしたいです。