こんにちわ。質問させてください。
ひとつのCSVファイルがあります。1列目の先頭の値はランダムねアルファベットです。
aという値が先頭にある列は、a.csvを生成して、a.csvにaの行を書き込みます。b,cも同様にb.csv,c,csvを生成して書き込みます。
要するに一枚のファイルから値ごとに新しいファイルを生成して書き込みをしたいのです。新しくできたファイルは追加書き込みをしないでの上書きモードです。substr関数を使って値を取り出すまではわかるのですが、そこからの処理がわかりません。どうぞ教えてください。よろしくおねがいします。
No.1ベストアンサー
- 回答日時:
こんな感じでいいと思います。
---------------------------------------------
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を生成して書き込むというふうにファイルごとにわけることをしたいです。
No.2
- 回答日時:
>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の部分を実際の元になるファイル名に変更して実行してみて下さい。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Access(アクセス) CSVファイルの「0落ち」にVBA 6 2023/02/02 15:27
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- その他(プログラミング・Web制作) データ解析ソフトRでのファイル入力read.csvがエラーになります 7 2022/03/27 22:11
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) VBAで特定の場所にあるCSVファイル(複数)から特定場所を抜き出してExcelに転記したいです。 11 2023/05/23 16:29
- Visual Basic(VBA) VBA 毎日取得するデータを順番に反映していく方法 6 2023/08/26 16:22
- Excel(エクセル) PowerQueryに詳しい方教えてください(Office365) 1 2022/07/24 21:11
- Excel(エクセル) csvに別のExcelの文章を差し込む 2 2023/04/01 16:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JavaでCSVファイルを高速に読む...
-
VBAでCSVファイルの特定行を書...
-
形態素解析の解析内容を各品詞...
-
CSVが可変長の場合の検索方法
-
vNoteのBODY部の取得(長めです)
-
openした後、closeしないでプロ...
-
VBAでCSVファイルを途中行まで...
-
VB6.0でDB接続する際に切断時の...
-
プログラミング(流れ図とコー...
-
拡張子 ”log” と ” dat” の違い
-
VBAコードを張り付け後のエクセ...
-
バッチファイルの作り方(CSV→...
-
batファイルでrenameができませ...
-
close()で例外が投げられる理由
-
vba dir の相対パス
-
MATLABのm-fileについて
-
文字列をカウントする方法
-
至急お願いします。C言語で.img...
-
一定時間が経過したフォルダの削除
-
画像アップロード機能を追加し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでCSVファイルの特定行を書...
-
ExcelをCSV書き出す場合のシー...
-
openした後、closeしないでプロ...
-
VBAでCSVファイルを途中行まで...
-
VBAで巨大なファイルの途中から...
-
ReadLineでの読み出し行を指定する
-
JavaでCSVファイルを高速に読む...
-
MATLAB グローバル変数の宣言
-
エクセルVBA コードが同じでも...
-
Perlの変数に文字数制限(容量...
-
perlで、後ろの行を読んで、前...
-
C言語でのファイルのデータ更...
-
2つのCSVファイルをマッチング
-
VB6.0でDB接続する際に切断時の...
-
CSVが可変長の場合の検索方法
-
perlで容量の大きいCSVファイル...
-
1ファイルずつ読み込みたい
-
VBScriptでファイル保存先のデ...
-
perl で googleAPIを呼び出す...
-
C#でCSVファイルを逐一更新したい
おすすめ情報