[Vienna-pm] Zeilenumbruch ersetzen

Stefan Weiss spaceman at foo.at
Fri Dec 5 13:11:09 PST 2008


On 2008-12-05 21:29, Fabio Valeri wrote:
> Hier ist anzumerken, dass (.) für ein Zeilenumbruch steht. D.h., das in 
> den Zellen des Spreadsheet in der Kolonne C Zeilenumbrüche vorhanden 
> sind. Semikoklon ist der Delimiter. In Notepad wird der Zeilenumbruch 
> als kleines Vierreck dargestellt ohne Zeilenumbruch. In Emacs findet 
> der  Zeilenumbruch statt und am Ende einer Zeile steht ^M. Wenn ich das 
> csv-File mit Emacs im Hexadezimal-Modus anschaue, erhalten ich an der 
> Stelle (.) Oa.

Das legt nahe, dass ein Zeilenumbruch innerhalb einer Zelle als \n (line
feed) vorliegt, und das Zeilenende \r\n (carriage return + line feed) ist.

> ********************************
> while (<INPUT>) {
> 
>     $row0 = $_;
>     $row0 =~ s/\x0a/xxx/g;   # Konvertierung von Zeilenumbruch nach xxx
>     print OUTPUT1 $row0,\n;
                          ^^
Das ist das Problem. \n muss gequoted werden, sonst interpretiert Perl
es als Referenz auf ein Symbol namens n. Das erzeugt dann die
"SCALAR..." Ausgabe. Um solche Fehler gleich zu finden, sollte man immer
-w bzw "use warnings" verwenden. Am besten auch gleich "use strict".

>     print OUTPUT1 "<tr>","\n";
> }
> ********************************

Probier's mal so:

$/ = "\r\n";
while (<INPUT>) {
    chomp(my $row = $_);
    $row =~ s/\n/xxx/g;
    print "$row<tr>\n";
}

oder ohne Hilfsvariable:

$/ = "\r\n";
while (<INPUT>) {
    chomp;
    s/\n/xxx/g;
    print "$_<tr>\n";
}

Die spezielle Variable $/ legt fest, welche Zeichen(folge) Perl als
Zeilenende ansieht. --> perldoc perlvar


HTH,
Stefan


-- 
LOAD"Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn!",8,1
RUN!


More information about the Vienna-pm mailing list