2009-09-02 67 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

相關問題