Forum: PC-Programmierung Perl - wie Nullen aus String entfernen


von Urbs (Gast)


Lesenswert?

Ich bekomme aus einem Logfile strings die leider unter Umständen eine 
oder mehrere Nullen enthalten können.

Da ich mit dem String ansonsten auch Stringverarbeitung machen möchte, 
kommen Operationen wie ".", print usw. durcheinander.

Daher möchte ich die Nullen entfernen.

Habe schon sowas wie s/\0/g /; probiert. Aber es geht nicht. Anscheinend 
bleibt die Null drin.

Leider finde ich dazu nichts bei google.

von Stefan E. (sende_de)


Lesenswert?

Vielleicht hilft Dir ja der folgende Codeschnippel erst mal weiter:
1
#! /bin/perl
2
$string = "Blubb000Laber0Blubb";
3
$string =~ s/0*//g;
4
print $string;

Gruß, Stefan

von olibert (Gast)


Lesenswert?

Das sollte den Job fuer dich tun:

$YourString =~ s/0//g;

von Stefan E. (sende_de)


Lesenswert?

Achja, geht natürlich auch mit "\0"...
1
#! /bin/perl
2
$string = "Blubb\0\0\0La\0ber\0Blubb";
3
$string =~ s/\0*//g;
4
print $string;

von Urbs (Gast)


Lesenswert?

Tschuldigung.
Ich meinte nicht die ASCII '0' mit Hex-Wert 0x30 sondern ASCII <NUL> mit 
Hex-Wert 0x00.

von Stefan E. (sende_de)


Lesenswert?

Urbs schrieb:
> Tschuldigung.
> Ich meinte nicht die ASCII '0' mit Hex-Wert 0x30 sondern ASCII <NUL> mit
> Hex-Wert 0x00.

Das habe ich mir im Nachhinein auch gedacht und habe mein zweites 
Posting hinterher geschoben. ;-)

Gruß, Stefan

von Urbs (Gast)


Lesenswert?

Da hat sichs überschnitten.

s/\0/ /

hatte ich probiert. Leider scheint ein anderes Problem die Ursache zu 
sein.
Danke für die Tips.

von Stefan E. (sende_de)


Lesenswert?

Urbs schrieb:
> hatte ich probiert. Leider scheint ein anderes Problem die Ursache zu
> sein.
Dann poste Doch bitte einmal einen String im Rohformat. Das sollte schon 
zu schaffen sein...

von Urbs (Gast)


Lesenswert?

:-)
Ich kann doch hier keine Nullen posten und Andreas wird dann böse.

Nein, mit "ein anderes Problem" meinte ich, das mein Fehler wohl 
zwischen den Ohren sitzt.

Ich habe da einen ganz merkwürdigen Effekt.

Ich mache über alle Inputzeilen ein Matching.

while(<>) {
  if($_ =~ /abc (.*)/) {
  }
  print $1 . "\n";
}


Ca. 10 Zeilen werden am Anfang gematcht und ich habe in $1 was 
drinstehen.
Dann auf einmal wird zwar der Ausdruck noch gematch, aber in $1 steht 
nichts mehr drin.
Dann, nach einigen Zeilen gehts wieder.

In den Zeilen stehen auch so Sachen wie 0x94 oder 0x80 drin.
Aber das steht auch in den Zeilen, bei denen vorher in $1 was drinstand.

Ich blicks gerade nicht.

von Urbs (Gast)


Lesenswert?

Mit allen Zeichen geht es auch nicht.

 if($_ =~ /abc ([0x00-0xFF]*)/) {

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.