Perl New Line Trennzeichen Problem

8

Ich habe eine Datei, die CR / LF verwendet, um Datensätze zu trennen, aber einzelne Datensätze enthalten manchmal ein LF.

%Vor%

Ich versuche, diesen Code wie oben zu lesen, und dies (wie ich es erwarte) teilt die Datensätze auf, die nur ein LF enthalten. Ich hätte jedoch erwartet, dass ein neu zugewiesenes $/ dieses Problem lösen würde, aber es scheint, dass das verursacht Komplette Datei für mich in einer Iteration lesen.

%Vor%

Wer kann hier eine funktionierende Lösung vorschlagen?

Ich verwende ActiveState Perl unter Windows.

    
Hans 09.07.2012, 08:47
quelle

3 Antworten

3

probiere das vorher während

%Vor%     
Nahuel Fouilleul 09.07.2012, 09:24
quelle
10

Unter Windows konvertiert Perl die eingehenden CRLF-Zeilenenden nur in LF, wodurch eine Unterscheidung zwischen CRLF und LF unmöglich gemacht wird, indem die Daten als Text eingelesen werden ( perlport ). Daher müssen Sie Ihre Daten im Binärmodus lesen, indem Sie binmode auf Ihrem Datei-Handle verwenden:

%Vor%

Danach können Sie das Eingabe-Trennzeichen auf "\ 015 \ 012" setzen und Ihre Datensätze wie gewohnt einlesen:

%Vor%

grüßt, Matthias

PS: Ich habe im Moment keine Gelegenheit, das lokal zu testen, also bedauere ich, dass es nicht funktioniert.

    
Matthias 09.07.2012 09:37
quelle
4

Versuchen Sie, $/ auf "\n" zu setzen. Von Newlines in perlport :

  

Perl verwendet \n , um die "logische" Newline darzustellen, wobei das was logisch ist   kann von der verwendeten Plattform abhängen. In MacPerl bedeutet \n immer 5 .   In DOSischen Perls bedeutet \n normalerweise 2 , aber beim Zugriff auf eine Datei in   "text" -Modus, Perl verwendet die :crlf -Schicht, die es in (oder von) übersetzt    52 , abhängig davon, ob Sie lesen oder schreiben.

    
Eugene Yarmash 09.07.2012 09:22
quelle

Tags und Links