perl如何处理csv文件

时间:2013-06-26 18:39:43

标签: perl csv

  while ( <IN_FILE> )
  {
    chomp;
    # do some processing

  }
  1. Perl如何处理文件,是否通常逐行处理?
  2. 什么构成一条线?如果它正在读取csv文件怎么办?
  3. 当我编辑一个在Windows上的记事本中打开的csv文件时,如果用自动翻译它只是一个巨大的文本块,大约有30行文本,它们在同一个地方中断,所以我假设多数民众赞成因为它达到行限制的末尾,我相信每行1024个字符?
  4. 那么perl将如何解析呢?
  5. 它是否被视为一个陈述或什么,是否有换行符?

4 个答案:

答案 0 :(得分:1)

Perl像处理任何其他文本文件一样处理CSV文件。

你的文件在记事本中看起来很有趣,因为你的文件是在Unix上创建的,并且有Unix行结束(仅限\ n)。记事本需要Windows行结束(\ r \ n(或者反过来?))。在Windows上使用写字板或更高级的编辑器查看Unix行结束。更好的是,在Unix编辑器中查看您的文件。

答案 1 :(得分:1)

  1. 行是一些以“行尾”字符结尾的字符。 perl中用于行尾字符的符号为\n。大多数文件读取操作“知道”行尾字符并相应地表现

  2. 行长并不重要

  3. perl会通过将特殊变量$_设置为从文件中读取的当前行来解析您的框架代码。然后,如果它是csv你可以读取转换字段与这样的my @fields = split(/,/,$_) $ field [0]将是该行中的第一个csv项目,$ field [1]是第二个,依此类推。 perl有像Text :: CSV这样的现成模块,可以使这种事情变得更容易并处理奇怪的情况

  4. perl“理解”换行符并适当处理它们

答案 2 :(得分:0)

  1. 使用<IN_FILE>语法时,是,逐行。
  2. 可能是由\n分隔的0个或多个字符的序列,在某些平台上可能为\r\n。有关很棒的CSV建议,请参阅@ HunterMcMillen的评论。
  3. 不要相信记事本的窗户 - 出于很多原因......请参阅@Arkadiy的回答
  4. 比记事本更好,像#2
  5. 一样逐行
  6. 不知道你的意思。如果有换行符,则为行分隔符。

答案 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上运行!)你没事。