[英]CR vs LF perl parsing
我有一個perl腳本,它解析一個文本文件,並將每行分解為一個數組。 當每一行都被LF終止時它工作正常,但當它們通過CR終止時,我的腳本處理不正確。 如何修改此行以解決此問題
my @allLines = split(/^/, $entireFile);
編輯:我的文件有一個混合的行,結尾是LF或結束CR它只是在CR結束時折疊所有行
Perl可以使用內置的:crlf
crlf PerlIO層處理CRLF和LF行結尾:
open(my $in, '<:crlf', $filename);
將自動將CRLF行結尾轉換為LF,並保持LF行結尾不變。 但CR-only文件是奇怪的。 如果您知道該文件僅使用CR,那么您可以將$ /設置為 "\\r"
,它將逐行讀取(但不會將CR更改為LF)。
如果必須處理未知行結尾的文件(甚至是單個文件中的混合行結尾),您可能需要安裝PerlIO :: eol模塊。 然后你可以說:
open(my $in, '<:raw:eol(LF)', $filename);
當您讀取文件時,它會自動將CR,CRLF或LF行結尾轉換為LF。
另一種選擇是將$/
設置$/
undef
,這將在一個slurp中讀取整個文件。 然后將其拆分為/\\r\\n?|\\n/
。 但是假設文件足夠小以適應內存。
在進行split
,您可以只處理不同的行結尾,例如:
my @allLines = split(/\r\n|\r|\n/, $entireFile);
如果使用<>
讀取它會自動將輸入拆分為行,但是您需要將$/
更改為\\r
。
$/
是“輸入記錄分隔符”。 有關詳細信息,請參閱perldoc perlvar
。
沒有任何方法可以改變正則表達式認為的行尾 - 它始終是換行符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.