Debug.writeline schreibt in eine Zeile

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Morrison.

    Debug.writeline schreibt in eine Zeile

    Hallo!

    Ich hab ein seltsames Problem. Und zwar lese ich ID3-Tags aus mp3-Dateien aus und lasse mir diese über eine Schleife ausgeben.
    Nun ist es aber so das obwohl ich "Debug.WriteLine" verwende die Ausgabe manche Daten hintereinander in eine Zeile schreibt obwohl diese alle separat in einzelnen Zeilen ausgegeben werden sollen.
    Hab mir überlegt das vllt. die gespeicherten Daten aus den mp3s mit komischen Zeichen versehen sein könnten, wie z.B. /n /b 0& etc. wasweißich..
    Wie kann ich den ausgegebenen String auf solche Zeichen überprüfen? Linefeed oder Einrücken oder sowas.
    Oder woran kann es liegen das die Strings hintereinander ausegeben werden?
    Hab schon .replace(/n/r, String.Empty) versucht..bringt nix.
    Kann ja sein das der String den du ausließt bereits Zeilenumbrüche enthält.
    Wenn du nur A-Z a-z und 0-9 zulassen willst geh durch den String Zeichenweise und wenn das Zeichen nicht mit einem Zeichen
    aus deiner Whitelist übereinstimmt ersetze es mit einem leeren String.
    Kannste entweder geschickt mit Regex/Linq machen oder einfach mit ner Schleife durchgehen mit Deiner Zeichenliste vergleichen und dann halt ersetzen.
    C# Developer
    Learning C++
    @Morrison Kann es sein, dass dieser Dein Code nicht der einzige Code in Deinem Projekt ist, der Debug.WriteLine() bzw. Debug.Write() verwendet?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Morrison schrieb:

    Hab mir überlegt das vllt. die gespeicherten Daten aus den mp3s mit komischen Zeichen versehen sein könnten, wie z.B. /n /b 0& etc. wasweißich.
    Jo, so ausgelesene Tag-Daten können auchmal \0 im String enthalten, und so ein String verhält sich höchst sonderbar.
    Also eine Suche wie

    VB.NET-Quellcode

    1. dim PosOfNull = myString.Indexof(Convert.ToChar(0))
    würde dieses irreguläre Zeichen finden.
    Und an der Position wäre der String dann abzuschneiden - etwa mit der .Substring() - Methode.
    Ja, wunderbar!
    Es lag an diesem "0"-Zeichen!

    Habs jetzt so gelöst:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. For Each _mp3File In _mp3DataList
    2. If Not String.IsNullOrEmpty(_mp3File._mp3Album) Then
    3. If _mp3File._mp3Album.IndexOf(Convert.ToChar(0)) <> -1 Then
    4. Debug.WriteLine(_mp3File._mp3Album.Substring(0, _mp3File._mp3Album.IndexOf(Convert.ToChar(0))))
    5. Else
    6. Debug.WriteLine(_mp3File._mp3Album)
    7. End If
    8. End If
    9. Next
    Das zieht sich bei ID3-Tags so durch.
    Tags sind zwar in den neueren Versionen mit einem Längenfeld versehen, aber zusätzlich gilt dasselbe Verfahren wie in den älteren Definitionen, wo die Felder feste Länge hatten:
    Wenn der Text nicht die komplette Länge des Feldes einnimmt, wird er nullterminiert.
    Sobald also in einem Tag ein Null-Character auftaucht, werden die restlichen Zeichen ignoriert.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --