Entfernen von Steuerzeichen und Spaces

Hallo,

habe da ein kleines Problem mit Steuerzeichen und Spaces:

Zunaechst muss ich aus einem Text alle Steuerzeichen entfernen. Die muss ich durch Spaces ersetzen, weil sonst einige Woerter einfach zusammen geschrieben werden (Zeilenumbruch). Das scheint auch zu klappen:
$zwfile =~ s/[\n\r\f\t]/ /g;

Aber dann muss ich alle Steuerzeichen und Spaces am Ende der Zeile entfernen. Und das klappt nicht. Da bleiben immer einige Spaces uebrig
$zwfile =~ s/[\s]$//g;

Aber \s steht doch fuer Steuerzeichen und Spaces - Oder?

Ich hoffe, da kann mir jemand weiterhelfen.

Herzliche Gruesse
Christian

Hallo,

Aber dann muss ich alle Steuerzeichen und Spaces am Ende der
Zeile entfernen. Und das klappt nicht. Da bleiben immer einige
Spaces uebrig
$zwfile =~ s/[\s]$//g;

$ matcht nur ein Dollarzeichen, das willst du sicher nicht.
$ matcht das Ende des Strings, nicht das Zeilenende - ausser du benutzt den /m-Modifier:

$zwfile =~ s/\s+$/ /mg

Aber \s steht doch fuer Steuerzeichen und Spaces - Oder?

Nur für „whitespaces“, Steuerzeichen wie \a (alarm bell) sind da nicht dabei. Wenn du Steuerzeichen matchen willst, geht das mit \P{isPrint} oder [^[:stuck_out_tongue:rint:]].

Siehe auch
http://perldoc.perl.org/perlref.html

HTH,
Moritz

Aber dann muss ich alle Steuerzeichen und Spaces am Ende der
Zeile entfernen. Und das klappt nicht. Da bleiben immer einige
Spaces uebrig
$zwfile =~ s/[\s]$//g;

Aber \s steht doch fuer Steuerzeichen und Spaces - Oder?

\s steht für Whitespaces. Um mehrere Whitespaces am Ende zu entfernen,
musst du den Quantifier + hinzufügen, sonst wird nur eins entfernt.
Die Klammern um das \s sind übrigens auch nicht nötig. Und das $
am Ende ist bestimmt auch ein Fehler, oder?

$string =~ s/\s+\z//;

Das entfernt mehrere Whitespaces \s+ am Ende des Strings \z.
Schau mal in perldoc perlre, da steht der Unterschied zwischen \z und $.

Siehe auch
http://perldoc.perl.org/perlref.html

Das sollte http://perldoc.perl.org/perlre.html heissen, da war ein f zu viel drin.

Moritz