while ( <IN_FILE> )
{
chomp;
# do some processing
}
答案 0 :(得分:1)
Perl像处理任何其他文本文件一样处理CSV文件。
你的文件在记事本中看起来很有趣,因为你的文件是在Unix上创建的,并且有Unix行结束(仅限\ n)。记事本需要Windows行结束(\ r \ n(或者反过来?))。在Windows上使用写字板或更高级的编辑器查看Unix行结束。更好的是,在Unix编辑器中查看您的文件。
答案 1 :(得分:1)
是
行是一些以“行尾”字符结尾的字符。 perl中用于行尾字符的符号为\n
。大多数文件读取操作“知道”行尾字符并相应地表现
行长并不重要
perl会通过将特殊变量$_
设置为从文件中读取的当前行来解析您的框架代码。然后,如果它是csv你可以读取转换字段与这样的my @fields = split(/,/,$_)
$ field [0]将是该行中的第一个csv项目,$ field [1]是第二个,依此类推。 perl有像Text :: CSV这样的现成模块,可以使这种事情变得更容易并处理奇怪的情况
perl“理解”换行符并适当处理它们
答案 2 :(得分:0)
<IN_FILE>
语法时,是,逐行。\n
分隔的0个或多个字符的序列,在某些平台上可能为\r\n
。有关很棒的CSV建议,请参阅@ HunterMcMillen的评论。答案 3 :(得分:0)
我将回答更广泛的问题,“我如何处理Perl中的CSV文件” - 答案很多,但更常见的方法之一是“使用Text :: CSV模块” “
https://metacpan.org/module/Text::CSV#SYNOPSIS上的大量示例代码,但是对于一个更简单的例子,这是我今天下午在工作中所做的:
# now we expect a CSV file on STDIN
while (<>) {
$csv->parse($_);
# grab the field values
my ( $agreement, $debt_id, $client_id, $campaign_id ) = $csv->fields();
# less interesting code goes here
}
很多人已经解决了您的具体问题,但如果您的问题是“我该如何处理此CSV”,那么无论内部字段中的换行符/逗号等如何,这应该只是工作。
至于文件中缺少换行符 - 正如其他人所说的那样,这可能只是一个Windows / Unix行结尾问题。只要它们是一致的(看起来它们都是 - 它们都不能在Windows上运行!)你没事。