mikrocontroller.net

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


Autor: Urbs (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan E. (sende_de)
Datum:

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

Gruß, Stefan

Autor: olibert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das sollte den Job fuer dich tun:

$YourString =~ s/0//g;

Autor: Stefan E. (sende_de)
Datum:

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

Autor: Urbs (Gast)
Datum:

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

Autor: Stefan E. (sende_de)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Urbs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da hat sichs überschnitten.

s/\0/ /

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

Autor: Stefan E. (sende_de)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Urbs (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Urbs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit allen Zeichen geht es auch nicht.

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.