我是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;
Run Code Online (Sandbox Code Playgroud)
mob*_*mob 10
在+>>
模式下打开文件将搜索到文件的末尾,因此除非您seek
回到文件的开头(或中间),否则无需读取任何内容.要以文件光标位于文件开头的读/写模式下打开,请使用+<
mode.
也就是说,您可能想重新考虑解决此问题的方法.看起来您正在尝试读取一行数据,修改它并将其写回文件.但是你完成它的方式是覆盖下一行数据而不是你刚读过的行,而且新数据比旧数据更长(有更多字节).这肯定会破坏您的数据文件.
一些更好的方法可能是
首先读取并处理所有数据,然后关闭并用处理过的数据覆盖输入
在处理数据时将数据写入临时文件,然后使用临时文件覆盖输入(另请参阅perl解释器的就地编辑模式)
使用类似的模块Tie::File
来处理此任务的基于行的I/O.
归档时间: |
|
查看次数: |
3247 次 |
最近记录: |