解決済み

Perl 先頭行に追加

  • すぐに回答を!
  • 質問No.9555772
  • 閲覧数201
  • ありがとう数3
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 74% (91/122)

恐れ入ります。
Perlで、配列がカンマで区切られたデータを読み込み、
その先頭行にデータを挿入したいのですが、
中々うまくいきません。

データ(/data/xxx.txt)の中身は、
test,test2
bbb,bbb2
ccc,ccc2
という感じで、カンマで区切られて改行で並んでいます。
そこに新たに$dateと$contで受けたデータを先頭行に追加する感じです。

open(FILE,"<./data/xxx.txt");
while($temp = <FILE>){
@temp=split(/,/,$temp);
push(@ddr,"$temp[0]","$temp[1]");
}

seek(@ddr,0,0);
unshift(@ddr,($date,$cont."\n"));

open(FILE,">./data/xxx.txt");
$new=join(",",@ddr);
print FILE $new;
close(FILE);


このように書いていますが、
print FILE @ddr とすると、配列が壊れた状態(全て繋がる)で先頭行には挿入されたのですが、カンマで区切って配列にして並べようとしたら、

test,test2
,bbb,bbb2,
,,ccc,ccc2,,

という感じで上手く並びません。

よろしくおねがいします。

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

  • 回答No.2

ベストアンサー率 32% (24/74)

ファイルを配列に読み込み
配列にunshiftで値をのっけて
そのまま配列をファイルに書き込む

open FILE,'./data/xxx.txt';
@ddr = <FILE>;
close FILE;

unshift @ddr,"$date,$cont\n";

open FILE,'>./data/xxx.txt';
print FILE @ddr;
close FILE;


なにかいろいろ処理するなら

open FILE,'./data/xxx.txt';
while($temp = <FILE>){
chomp $temp;
@temp=split(/,/,$temp);

なにか処理

###push(@ddr,"$temp[0]","$temp[1]");
これだと$temp[0]と$temp[1]が順番に代入される
見づらいけどコンマとまとめて代入するなら""で囲む

push @ddr,"$temp[0],$temp[1]\n";
}
close FILE;

###seek(@ddr,0,0);
unshift @ddr,"$date,$cont\n";

open FILE,'>./data/xxx.txt';
###$new=join(",",@ddr);
###print FILE $new;
print FILE @ddr;
close FILE;
お礼コメント
spider32

お礼率 74% (91/122)

ありがとうございます。目的としていた結果が得られました。
""で纏めて代入すれば良いんですね!
大変助かりました。
投稿日時 - 2018-11-09 07:41:19
感謝経済

その他の回答 (全2件)

  • 回答No.3

ベストアンサー率 32% (24/74)

open FILE,'./data/xxx.txt';
これ全角が入ってたんで↓に訂正
open FILE,'./data/xxx.txt';
お礼コメント
spider32

お礼率 74% (91/122)

修正ありがとうございます。
投稿日時 - 2018-11-09 07:39:23
  • 回答No.1

ベストアンサー率 32% (56/175)

txtとか、csvなど、基本的にパソコンのファイルは順編成ファイルと呼ばれるもので、先頭への追加とか、途中レコードの変更というのはできません。この仲間として、カセットテープとかも同じ部類です。もしやりたいのであれば、メモリ上追加したイメージで作成し、それをファイル(上書き)へ書き直すことになります。
お礼コメント
spider32

お礼率 74% (91/122)

そうでしたか。。以前出来た記憶だったので、すこしチャレンジしてみます。
投稿日時 - 2018-11-09 07:40:20
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集


感謝指数をマイページで確認!

ピックアップ

ページ先頭へ