New Line
#TOM
- perl
0 Spark0 Wolfgang Wiese0 TOM
Hallo. Ich moechte Zeilenumbrüche durch ein anders Symbol ersetzen,
bis jetzt mach ich das folgend:
$GetString =~ s/\n/&nl/msg;
Gibt es da was besseres (was funktioniert)?
gruß
tom
Gibt es da was besseres (was funktioniert)?
hi,
wenn das funktioniert warum willst du dann etwas besseres?
kürzer geht es ja wohl kaum ;)
m und s würde ich allerdings weglassen.. das scheint mir etwas widersinnig den string erst als mehrzeilig und dann wieder als einzeilig zu betrachten ;)
also
$GetString =~ s/\n/&nl/g;
sollte genau das selbe machen.
gruß, Spark
Hi.
Bei mir kommt so was raus:
<QUESTION value="1
&nl2
&nl3"/>
Versteht du das? Die Eingabe war
1
2
3
Er findet also die Zeilenumbrüche aber er ersetzt sie nicht, ist doch doof oder.
Gruß
tom
Hi,
Bei mir kommt so was raus:
das liegt daran, daß Du von Windows aus abschickst, da sind die Zeilenumbrüche anders als "normal". Benutze als RegExp:
s/\015\012\015\012/&n/g;
Er findet also die Zeilenumbrüche aber er ersetzt sie nicht, ist doch doof oder.
Er ersetzt nur \n, nicht \r. Obige Ersetzung sollte arbeiten - wobei ich "&n" als Ergebnis ziemlich sinnfrei finde, besser wäre z.B. "\n" (gewissermaßen "\n" als Klartext) oder "<br>".
Cheatah
Hi,
Hallo. Ich moechte Zeilenumbrüche durch ein anders Symbol ersetzen,
bis jetzt mach ich das folgend:
$GetString =~ s/\n/&nl/msg;
mach es besser so:
$GetString =~ s/\n\r/&nl/msg;
schoener:
$GetString =~ s/[\n\r]+/&nl/msg;
Grund: Auf diesem Windows-System gibt es nicht nur den
Zeilenumbruch \n, sondern auch ein Rollback \r, damit die
Schreibmaschinen auch wissen, wo sie ihren Schreibkopf
hintun muessen :)
Ciao,
Wolfgang
Hi,
schoener:
»» $GetString =~ s/[\n\r]+/&nl/msg;
Nachteil: Auch z.B. "\n\n\n\n\n\n\n" wird durch _ein_ "&nl" ersetzt.
Übrigens sind weder /m noch /s nötig, ein einfaches /g reicht :-)
Cheatah
hi!
»» $GetString =~ s/[\n\r]+/&nl/msg;
Übrigens sind weder /m noch /s nötig, ein einfaches /g reicht :-)
/m lässt den Ausdruck mehrzeilig erscheinen, /s interpretiert ihn als einzeilig. Meinem Verständnis von
Logik folgend dürfte sich das sowieso eher gegenseitig ausschließen :)
bye, Frank!
Hi Frank!
/m lässt den Ausdruck mehrzeilig erscheinen, /s interpretiert ihn als einzeilig. Meinem Verständnis von
Logik folgend dürfte sich das sowieso eher gegenseitig ausschließen :)
Aber nur, weil bei dieser Aussage ein Informationsverlust vorliegt. Richtig muss es heissen:
/m laesst ^ und $ nicht nur am Anfang und Ende eines Strings matchen, sondern auch an Zeilengrenzen (also \n) innerhalb des Strings.
/s sorgt dafuer, dass . (beliebiges Zeichen) auch bei \n matcht, was es normalerweise nicht tut.
Und das ist keineswegs ein Widerspruch.
So long
Hi!
mach es besser so:
»» $GetString =~ s/\n\r/&nl/msg;
Ist immer noch nicht cross-platform compatible. \n und \r sind eher logische Zeichen, deren ASCII-Wert *nicht* definiert ist, jedenfalls nicht auf allen Plattformen gleich. Lediglich bei Unix und Win kann man davon ausgehen, dass \n eq \012 und \r eq \015. (Auf Win wird dann bei STDIO-Ausgaben im textmodus durch die Runtime ein \012 zu \015\012 konvertiert.) In Mac-Perl z.B. ist \n eq \015. Daher lieber
s/\015\012|\015|\012/&n/g;
verwenden.
So long
Dank an alle.
Wer konnte auch wissen das Windows nicht mit
\n alleine auskommen kann.
gruß
tom