我确信有人会解释以下脚本发生了什么:
请注意,我指定的文件可用且正在打开。我知道这是因为文件的最后一行是在程序运行时输出的,但它只是最后一行。
关于.csv文件的注意事项:它是在Windows上生成的(我使用的是OS X 10.7.4和Perl 5.12.3)并使用\r
换行符。我试图告诉Perl,换行符字符是\ r在脚本的顶部,但它不起作用。我知道它们是\r
,因为grep搜索在文本编辑器中找到它们。
脚本运行并仅打印文件的最后一行。如果我插入一个正则表达式,它将从第一行获取第一个匹配字段并回显它,但我不能迭代整个文件。
任何澄清都表示赞赏,因为我是perl的新手。
#!/usr/bin/perl
use warnings;
print "Please enter your filename:";
my ($dataline);
open(INFO,'./expensereport.csv') || die("can't open datafile: $!");
while (my $line = <INFO>) {
chomp $line;
print $line;
}
print $!;
答案 0 :(得分:1)
没有换行的回车导致打印覆盖同一行的每一行,所以你看到的只是最后一行。
在处理之前在输入文件上运行dos2unix。
答案 1 :(得分:1)
有几种方法可以告诉perl你的输入文件是windows风格的:crlf。
perldoc -f binmode
或perldoc -f open
open(INFO, '<:crlf', './expensereport.csv')
...
答案 2 :(得分:0)
看,你有一个带\ r(回车,字面)和\ n(换行符)的文件。 chomp
切断\ n(新行)。所以你一遍又一遍地打印同一行(记得“回车”)。
使用print "$line\n";
代替