我正在尝试在名称和addreses文件中读取。它可能看起来像这样:如何更改文本文件中的记录分隔符?
John Doe
123 Main Street
My Town, US 12345
Ralph Kramden
c/o Joe
999 North Lane
YourTown, US 22839
哪里有记录之间总是有一条线。但是我不知道如何告诉Perl,接下来的X行都是一条记录。 (并且X可以变化)。
如何做到这一点?
我正在尝试在名称和addreses文件中读取。它可能看起来像这样:如何更改文本文件中的记录分隔符?
John Doe
123 Main Street
My Town, US 12345
Ralph Kramden
c/o Joe
999 North Lane
YourTown, US 22839
哪里有记录之间总是有一条线。但是我不知道如何告诉Perl,接下来的X行都是一条记录。 (并且X可以变化)。
如何做到这一点?
$/
输入记录分隔符,默认换行符。这个 影响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.
}
}
$/ = "";
对待空行 “记录分隔符”。
dup http://stackoverflow.com/questions/1365683/_/1365696#1365696 – 2009-09-02 03:39:04
太棒了。谢谢,克里斯。 – Pistol 2009-09-02 03:40:31
有一件好事就是,正如'perldoc'引用中所说的那样,您可以将它设置为'“\ n \ n”'跳过一个空白行,或者“\ n \ n \ n”'跳过两个空格行或''“'跳过任意数量的空白行,这可以让您构建更宽松的”解析器“,这通常会让其他人的生活更轻松。 – 2009-09-02 03:51:22