如何更改文本文件中的记录分隔符?

时间:2009-09-02 03:19:54

标签: perl

我正在尝试读取带有名称和地址的文件。它可能看起来像这样:

John Doe
123 Main Street
My Town, US 12345

Ralph Kramden
c/o Joe
999 North Lane
YourTown, US 22839

记录之间总是有一条线。但我不知道如何告诉Perl接下来的X行都是一条记录。 (而X可以变化)。

怎么办呢?

2 个答案:

答案 0 :(得分:14)

来自perldoc perlvar

  

$/
  输入记录分隔符,默认为换行符。这个   影响Perl对“线”是什么的看法。像awk一样工作   RS变量,包括将空行视为终止符if   设置为空字符串。 (空行不能包含任何内容   空格或制表符。)您可以将其设置为多字符串   匹配多字符终结符,或“undef”来读取   通过文件的结尾。将其设置为“\ n \ n”意味着什么   如果文件包含,则设置为“”略有不同   连续空行。设置为“”将处理两个或更多   连续的空行作为一个空行。设置为   “\ n \ n”将盲目地假设下一个输入字符   属于下一段,即使它是换行符。   (助记符:/在引用诗歌时划界线边界。)

所以试试这个:

{
  open my $fh, "<", $input_file;
  local $/ = "";
  while(<$fh>) {
    # each loop, $_ will be a different record
    # the first will be "John Doe\n123 Main Street\nMy Town, US 12345\n\n"
    # etc.
  }
}

答案 1 :(得分:2)

$/ = "";

将空行视为“记录分隔符”。