我正在嘗試在名稱和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