私はperlを使い慣れていて、perlのcsvファイルを読み書きしようとしています。しかし、問題はどこにあるのかわからないことがあります。私は '<'を使用しても問題なく読むことができますが、書き込めません。 +>>
モードでファイルを開くファイルの読み取りと書き込みの両方を行います。
use strict;
use warnings;
use Text::CSV_XS;
my $file = 'file.csv';
my $csv = Text::CSV_XS->new();
open (InCSV, '+>>', $file) or die $!;
while (<InCSV>) {
if ($csv->parse($_)) {
my @columns = $csv->fields();
if($columns[1] eq "01") {
my $str = "Selected $columns[6] \n ";
push(@columns,$str);
print InCSV join("," , @columns), "\n";
}
} else {
my $err = $csv->error_input;
print "Failed to parse line: $err";
}
}
close InCSV;
私は+を使用して書いているときに<コンソールが書いているときに固まっています。もう一つは、すべての行を修正したくないということです。私は条件が満たされている特定の行だけに書きたいと思う。だから、異なるファイルへの書き込みや保存が問題になるでしょう。より良い方法がありますか? – mousey
一般に、(1)変更されたデータが元のデータとまったく同じサイズであるか、または(2)変更するデータがファイルの最後にある場合に、その場でデータを変更できます。そうしないと、データが破損します。 まだ、あなたはかなり典型的な仕事をしているようです。なぜ典型的なソリューションを使用しないのですか?処理したデータをメモリまたは一時ファイルに保存してから、入力ファイルを上書きします。 – mob
ここでの誤解は、読み書きを区別することだと思います。 open(3)と '<'でopenされたように、ハンドラを読み込んで閉じます。データを処理します。 '>'または '>>'でもう一度(3)を開いて書き込みます。 –