Seite 1 von 1
Perl: Zeilenumbruch erkennen.
Verfasst: 16.09.2005, 10:53
von Nullpointer
Ich schkeife zeilenweise durch eine Datei.
Dabei wird jede Zeile in ein Array gesplittet.
Nun gibt es den Fall, dass der letzte Eintrag des Arrays einen String plus Umbruch oder nur einen Umbruch enthält.
Diesen Fall möchte ich in einer if-Abfrage unterscheiden.
Ich habe es wahlweise mit
und
probiert. Dabei gab es zwar keine Fehlermeldung, aber die Zeilen mit nur dem Umbruch wurden auch nicht erkannt.
I know it's simple but it's perl

Verfasst:
von
SEO Consulting bei
ABAKUS Internet Marketing Erfahrung seit 2002
- persönliche Betreuung
- individuelle Beratung
- kompetente Umsetzung
Jetzt anfragen:
0511 / 300325-0.
Verfasst: 16.09.2005, 12:06
von LinkPop
if ($ding eq "\n")
Perl: Zeilenumbruch erkennen.
Verfasst: 16.09.2005, 14:06
von csx
if $ding=~/^\r?\n/
Dann hast du Windows-Zeilenumbrüche auch mit drin... oder
if $ding=~/^(\r\n|\r|\n)/
um Mac auch mitzunehmen.
Gruß
csx
Re: Perl: Zeilenumbruch erkennen.
Verfasst: 16.09.2005, 19:25
von Kristian
Hallo @gsx
if $ding=~/^\r?\n/
Dann hast du Windows-Zeilenumbrüche auch mit drin... oder
Du solltest der Vollständigkeit halber erwähnen, dass das ^ in einer regex den Zeilenanfang meint.
if $ding=~/^(\r\n|\r|\n)/
um Mac auch mitzunehmen.
Hast du nen Mac? Mir wurde gesagt, dass der Mac Linebreaks intern als \r sieht, allerdings seien beim Mac \r und \n vertauscht (aus Nicht-Mac-Sicht) somit müßte die obige regex den Mac schon mitnehmen, da es für uns \n ist.
Gruß Kristian
Re: Perl: Zeilenumbruch erkennen.
Verfasst: 16.09.2005, 19:33
von Kristian
Hallo @Nullpointer
probiert. Dabei gab es zwar keine Fehlermeldung, aber die Zeilen mit nur dem Umbruch wurden auch nicht erkannt.
kristian@under-the-sky:~> perl -we 'my $line = "\n"; if($line eq \n){ print "jo\n"}'
Unquoted string "n" may clash with future reserved word at -e line 1.
-w bzw. use warnings (ab 5.6) schaltet dir die Hinweise an, die dich vor solchem Unheil bewahren.
kristian@under-the-sky:~> perl -we 'my $line = "\n"; if($line eq "\n"){ print "jo & Gruß\n Kristian\n"}'
jo & Gruß
Kristian
Perl: Zeilenumbruch erkennen.
Verfasst: 16.09.2005, 21:55
von csx
IIRC ist es doch
Unixe -> \n
WinDos -> \r\n
Mac -> \r
https://en.wikipedia.org/wiki/Newline#Representations
Mac < X benutzt \r
Perl: Zeilenumbruch erkennen.
Verfasst: 17.09.2005, 11:13
von Kristian
Hallo
@csx Ja ich habe auch nicht wirklich etwas anderes behauptet. Der Mac benutzt "\r".
Aber das "\r" des Mac ist das "\n" auf Unix.
Siehe dazu "perldoc perlport".
Hier wird meine Aussage unter "Newlines" bestätigt.
| Unix | DOS | Mac |
---------------------------
\n | LF | LF | CR |
\r | CR | CR | LF |
\n * | LF | CRLF | CR |
\r * | CR | CR | LF |
---------------------------
* text-mode STDIO
Somit ist auf Nixen und Dosen die einfache Regex absolut ok..
Gruß Kristian
Perl: Zeilenumbruch erkennen.
Verfasst: 19.09.2005, 08:20
von Nullpointer
1000 Dank.
So lange die Kanzlerfrage nicht geklärt ist, vielleicht noch was zur Überbrückung
möchte ich die & umwandeln. wie bekomme ich hin, dass er nicht nur das erste zeichen aus dem ersetzungsstring nimmt, sondern den ganzen string?
Perl: Zeilenumbruch erkennen.
Verfasst: 19.09.2005, 14:19
von Kristian
Hallo
$ref =~ s/\&/&/g;
oder besser "use HTML::Entities;" => perldoc HTML::Entities
Gruß Kristian