Hilmar Preusse hille42@web.de writes:
When ich mittels perl² ein File parsen will, definiere ich mir einfach einen Filehandler, mache dann das Teil mittels open() auf und kann mittels while() zeilenweise durchscannen. Fein. Jetzt habe ich ein File vorliegen, in dem die Zeilenenden auf DOS-Enter enden, will sagen ausschließlich auf dieses Zeichen und kein normales Enter-Zeichen (Beispiel hängt an). Dann hängt sich der Parser weg und erkennt nichts mehr. Gibts dafür eine triviale Lösung? Konkret gehts mir um: http://bugs.debian.org/107258 .
Kann sein, daß ich's zu kompliziert sehe, aber IMHO ist das Problem daher bissel diffiziler, weil die EOLs gemischt auftreten. Die Problemzeile sind Mac EOLs. Diese Mischung mußt Du IMHO auch entsprechend "heterogen" und für Deinen Bug möglichst systemunabhängig behandeln, z.B. so:
--------------------------------------------------------- #! /usr/bin/perl
open F, "< BabyTuX_color.eps" or die "Bummer"; while (<F>) { my @sublines = split /\r(?!\n)/; # \r ohne folgendes \n foreach my $line (@sublines) { chomp $line; print ":$line"."$/"; # "Applikation" } } close F; ---------------------------------------------------------
Das ganze klappt jetzt neben der angegebenen Mischung aus Unix/Mac EOLs auch mit der Mischung DOS/Mac EOLs.
Dort, wo ich "Applikation" hingeschrieben habe, machst du, was Du normalerweise mit einer Zeile machen muß. Falls Du's nur in eine andere Datei konvertieren willst, halt open(FOUT, "> xyz") und "print FOUT" oder sowas.
Beachte, daß beim print nicht "\n", sondern das system-spezifische EOL $/ verwendet wird. Damit sollte es auch unter anderen Systemen klappen (nicht wirklich getestet).
GreetinX Steffen