我正在尝试读取带有名称和地址的文件。它可能看起来像这样:
John Doe
123 Main Street
My Town, US 12345
Ralph Kramden
c/o Joe
999 North Lane
YourTown, US 22839
记录之间总是有一条线。但我不知道如何告诉Perl接下来的X行都是一条记录。 (而X可以变化)。
怎么办呢?
答案 0 :(得分:14)
$/
输入记录分隔符,默认为换行符。这个 影响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)
$/ = "";
将空行视为“记录分隔符”。