Fehler beim Zusammenfügen von 2 Strings! ??? Wieso ???

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von Bernd.

    Fehler beim Zusammenfügen von 2 Strings! ??? Wieso ???

    Hallo Community,

    ich versuche aus dem ID3-Tags einer .mp3-Datei den Interpreten und Titel zusammen zu fügen um einen neuen Dateinamen zu erstellen.
    Ich lasse mir aber zur Kontrolle erst alles in einer ListView (Detail) anzeigen.

    Bei der Anzeige der neuen Dateinamen kommt es zu folgenden Problem:
    Bei manchen Listvieweinträgen wird der Dateiname wie gewünscht "gebaut" bei anderen Dateien wiederum nicht. Wie unten auf dem Bild zu sehen baut das Programm einen neuen Dateinamen (1. und 4 Zeile) nur aus dem Interpreten und beachtet den Titel nicht. Ich kann leider nicht erkennen woran das liegt.

    Hier mein Code:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim Name1 As String = Item.SubItems(1).Text
    2. Dim Name2 As String = Item.SubItems(2).Text
    3. Dim NeuerName As String = Name1 & " - " & Name2
    4. Item.SubItems(3).Text = NeuerName
    5. MsgBox(Name1 & Name2)
    6. Item.ForeColor = Color.Green

    Und hier die ein Screenshot vom laufendem Programm.... da kann doch was nicht stimmen:


    Kann mir bitte jemand erklären woran das liegen mag?
    Vielen Dank

    //EDIT: Es ist mir beim debuggen aufgefallen das die betroffen Dateien nur ein Anfühtungszeichen besitzen... z.B. "Bob Acri
    Die richtigen Dateien haben zwei Anführungszeichen z.B "RichardStolzmannSlovakRadio"
    Vielleicht hilft das!!!

    MfG
    No!

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „Novazizo“ ()

    Es liegt an der MP3 Datei.
    Es gibt verschiedene Versionen. ID2 ID3 usw..
    Also je nach Datei kommt das richtige Ergebnis.

    Du solltest mit einem MP3_ID_Tag Programm (Davon gibt es hunderte) erst den Titel und den Intepreten
    überarbeiten.


    Bernd
    Aber ich kann doch ohne Problem den ID_Tag auslesen.

    Ich arbeite in dem Moment doch nur mit Strings!

    Hab ich eben noch entdeckt:
    Es ist mir beim debuggen aufgefallen das die betroffen Dateien nur ein Anfühtungszeichen besitzen... z.B. "Bob Acri
    Die richtigen Dateien haben zwei Anführungszeichen z.B "RichardStolzmannSlovakRadio"
    Vielleicht hilft das!!!

    MfG
    was wird denn als String.Length angegeben bei "Bob Acri ?
    vmtl. ein fehler beim IDTag-Auslesen, aber zur Not kannsteden String einfach kürzen.

    Ah-ja: Da wird ein NullChar im String enthalten sein, und sowas kann kein Control vernünftig anzeigen.
    Also nach vbnullchar suchen und gefundenenfalls dort abschneiden.

    Oder aber das Auslesen des IDTags korrigieren.
    und wie suche ich nach vbnullchar?

    ich kann mir nicht vorstellen das ich falsch auslese: hier der Code wie ich den ID_Tag auslese:

    VB.NET-Quellcode

    1. Dim Song As String, Interpret As String
    2. Dim File As String, fs As FileStream, br As BinaryReader
    3. File = FolderBrowserDialog1.SelectedPath & "\" & Datei.Name
    4. fs = New FileStream(File, FileMode.Open, FileAccess.Read)
    5. br = New BinaryReader(fs)
    6. Dim file1 As New FileInfo(File)
    7. Dim tagpos As Integer = (file1.Length - 128)
    8. fs.Position = tagpos + 3
    9. Song = br.ReadChars(30)
    10. Song = Trim$(Song)
    11. fs.Position = tagpos + 33
    12. Interpret = br.ReadChars(30)
    13. Interpret = Trim$(Interpret)

    Novazizo schrieb:

    //EDIT: Es ist mir beim debuggen aufgefallen das die betroffen Dateien nur ein Anfühtungszeichen besitzen... z.B. "Bob Acri
    Die richtigen Dateien haben zwei Anführungszeichen z.B "RichardStolzmannSlovakRadio"
    Vielleicht hilft das!!!

    Ja, das hilft. Ist Dir jemals gelungen, unter Windows eine Datei mit Anführungszeichen zu benennen?
    Also Dateiname vor der Verwendung auf ungültiges Zeichen prüfen, z.B. hiermit

    xtts02 schrieb:


    Ja, das hilft. Ist Dir jemals gelungen, unter Windows eine Datei mit Anführungszeichen zu benennen?
    Also Dateiname vor der Verwendung auf ungültiges Zeichen prüfen, z.B. hiermit


    Die Anführungszeichen sind ja im Ausgangs- sowie im Endstring nicht vorhanden! Die zeigt er nur im Debugmodus an.

    ErfinderDesRades schrieb:


    mit String.IndexOf

    Bei MSDN steht über vbNullchar: Stellt ein NULL-Zeichen für Druck- und Anzeigefunktionen dar.
    Ich finde weder ein NULL-Zeichen noch sonstiges...


    Ich möchte nochmal auf die Problematik hinweisen.

    Das alles funktioniert:

    VB.NET-Quellcode

    1. Dim Name1 As String = Item.SubItems(1).Text
    2. Dim Name2 As String = Item.SubItems(2).Text
    3. Item.SubItems(3).Text = Name1

    VB.NET-Quellcode

    1. Dim Name1 As String = Item.SubItems(1).Text
    2. Dim Name2 As String = Item.SubItems(2).Text
    3. Item.SubItems(3).Text = Name2

    Nur das funktioniert nicht:

    VB.NET-Quellcode

    1. Dim Name1 As String = Item.SubItems(1).Text
    2. Dim Name2 As String = Item.SubItems(2).Text
    3. Dim NeuerName As String = Name1 & " - " & Name2
    4. Item.SubItems(3).Text = NeuerName

    VB.NET-Quellcode

    1. Dim Name1 As String = Item.SubItems(1).Text
    2. Dim Name2 As String = Item.SubItems(2).Text
    3. Dim NeuerName As String = Name1 & " - " ' nicht mal das "-" wird bei den betroffenen Dateien angezeigt!!!!
    4. Item.SubItems(3).Text = NeuerName


    Warum setzt vb nicht zwei Strings zusammen oder ein Zeichen hinter einen String?
    Es muss was mit den Anführungszeichen zu zun haben die im Debugmodus zu sehen sind.

    Mit der Bitte um Hilfe....
    No!
    Öhm ja.... was soll ich sagen?! :whistling:
    Ich würde mich gerne bei dir bedanken... VIELEN DANK!

    Meine Lösung:

    VB.NET-Quellcode

    1. Dim Name1 As String = Item.SubItems(1).Text
    2. Name1 = System.Text.RegularExpressions.Regex.Replace(Name1, "[\.?:/|<>*""]", "")
    3. If Name1.IndexOf(vbNullChar) > 0 Then
    4. Name1 = Name1.Substring(0, Name1.IndexOf(vbNullChar))
    5. End If
    6. Dim Name2 As String = Item.SubItems(2).Text
    7. Name2 = System.Text.RegularExpressions.Regex.Replace(Name2, "[\.?:/|<>*""]", "")
    8. Dim NeuerName As String = Name1 & " - " & Name2
    9. Item.SubItems(3).Text = NeuerName
    10. Item.ForeColor = Color.Green


    Falls du noch Verbesserungsvorschläge hast immer her damit :)
    Danke nochmal :thumbup:
    @EDR
    MP3 Wiki
    Er braucht keine Null oder String.Empty oder der gleichen abfragen/rauschneiten/filtern.

    Bevor mann einen MP3 TAG ausliest,
    - MP3 TAG Type ermitteln
    - Auswahl des einlesen wählen

    und dann wird erst eingelesen.
    Dann entstehen auch keine Null oder ähnlichen Dinger.......

    Da er aber meine Frage aus Post 6
    nicht beantwortet. Weis man nicht wie er die Infos abholt und welche Infos er überhaupt bekommt.