アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちわ。質問させてください。

ひとつのCSVファイルがあります。1列目の先頭の値はランダムねアルファベットです。

aという値が先頭にある列は、a.csvを生成して、a.csvにaの行を書き込みます。b,cも同様にb.csv,c,csvを生成して書き込みます。

要するに一枚のファイルから値ごとに新しいファイルを生成して書き込みをしたいのです。新しくできたファイルは追加書き込みをしないでの上書きモードです。substr関数を使って値を取り出すまではわかるのですが、そこからの処理がわかりません。どうぞ教えてください。よろしくおねがいします。

A 回答 (2件)

こんな感じでいいと思います。


---------------------------------------------
open(DATAFILE, "<", "data.csv"); #元になるファイル
while(<DATAFILE>){ #一行読み込み
($fileName, $content)=split(/,/, $_, 2); #分割
open(FILE, ">", "$fileName.csv"); #ファイルを作成
print FILE "$content";
close(FILE);
}
close(DATAFILE);

この回答への補足

ありがとうございます。substr()関数の処理はどこへ書けばいいのでしょうか。

$data=item[0]

substr($data,0,1);

として、アルファベットが入ってるセルの$dataから先頭のアルファベットa,b,cとかの値を取り出して、aならa.csvを生成して、そのaの行を書き込むというやり方です。この処理は教えていただいた記述の最初にかくべきですか?
具体的にわたしがやりたいのは外人の名前でマイケルジャクソンだったら、頭の文字がmなのでmのファイルを生成して、そこにマイケルジャクソン(正しくは英語で記述)トムクルーズやトムハンクスだったら頭がtの文字なので、t.csvを生成して書き込むというふうにファイルごとにわけることをしたいです。

補足日時:2005/09/07 17:08
    • good
    • 0

>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の部分を実際の元になるファイル名に変更して実行してみて下さい。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!