2009-09-02 82 views
4

我正在尝试在名称和addreses文件中读取。它可能看起来像这样:如何更改文本文件中的记录分隔符?

John Doe 
123 Main Street 
My Town, US 12345 

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

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

如何做到这一点?

回答

13

perldoc perlvar

$/
输入记录分隔符,默认换行符。这个 影响Perl关于“行”的概念。像awk的 RS变量一样工作,包括将空行视为终止符,如果 设置为空字符串。 (空行不能包含任何 空格或制表符。)您可以将其设置为多字符字符串,以便与多字符终止符匹配为 ,或者将其设置为“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. 
    } 
} 
+0

太棒了。谢谢,克里斯。 – Pistol 2009-09-02 03:40:31

+0

有一件好事就是,正如'perldoc'引用中所说的那样,您可以将它设置为'“\ n \ n”'跳过一个空白行,或者“\ n \ n \ n”'跳过两个空格行或''“'跳过任意数量的空白行,这可以让您构建更宽松的”解析器“,这通常会让其他人的生活更轻松。 – 2009-09-02 03:51:22

1
$/ = ""; 

对待空行 “记录分隔符”。

+0

dup http://stackoverflow.com/questions/1365683/_/1365696#1365696 – 2009-09-02 03:39:04

相关问题