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

Code: Alles auswählen

if ($ding eq \n)
und

Code: Alles auswählen

if ($ding eq \r)
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 ;-)

Code: Alles auswählen

$ref =~ tr/\&/\&amp\;/;
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