none
In einer Binären Datei das nächste NUL finden / anstuern RRS feed

  • Frage

  • Hallo zusammen,

    Ich habe in einer MP3 Datei folgendes Problem.
    Finden kann ich die TAG mit
     PosDesTAG = Abfrage.IndexOf("TT2")
                    TextBox10.Text = Microsoft.VisualBasic.Mid(Abfrage, PosDesTAG + 8, 15) ' Song

    Ergebnis:
    "Der Titel des Song" ' jedoch nur 15 Zeichen, weil ich ja nicht mehr auslese.
    Die länge des TAG ist ja bei jedem Song unterschiedlich.

    Nun endet jeder TAG mit einem NUL
    Jetzt möchte ich aber nicht nur 15 Zeichen auslesen, sonder bis ans Ende.
    Aber wie ermittel ich nun innerhalb des angegebenen TAG das nächte "NUL"

    Die Startposition habe ich ja, nun müsste ich ab der Startposition ermitteln,
    an welcher stelle nun das "NUL" steht ?

    Ich hoffe ich habe micht verstänlich ausgedrückt !?
    lieben dank
    Bernd

    Samstag, 16. Januar 2010 08:06

Antworten

  • Hallo Bernd,

    eine Nul ist zunächst auch nur ein Zeichen, dass Du mit Abfrage.IndexOf(ChrW(0)) oder ControlChars.NullChar findest.

    Aus dem Stegreif getippt:
    Dim tagStart As Integer = posDesTAG + 8
    Dim tagLength As Integer = Abfrage.IndexOf(ControlChars.NullChar, tagStart)
    If tagLength = -1 Then
        tagLength = 15
    else
        tagLength = tagLength - tagStart - 1
    End If
    Dim tagText As String = Abfrage.Substring(tagStart, tagLength)
    Beachte aber, dass Du hier mit Zeichenketten arbeitest, die in .NET immer Unicode sind.
    Je nach Variante werden aber in der Datei unterschiedliche Zeichensätze verwendet,
    wenn ich in die Wikipedia schaue. Wodurch es zu Fehlern kommen kann.

    Sicherer kann es sein, zunächst mit einem Byte() Array zu arbeiten
    und danach eine Konvertierung vorzunehmen.

    Da es im Web reichlich Infos zu MP/ID3 gibt schau Dich da mal um.

    Gruß Elmar
    Samstag, 16. Januar 2010 10:11
    Beantworter

Alle Antworten

  • Hallo Bernd,

    eine Nul ist zunächst auch nur ein Zeichen, dass Du mit Abfrage.IndexOf(ChrW(0)) oder ControlChars.NullChar findest.

    Aus dem Stegreif getippt:
    Dim tagStart As Integer = posDesTAG + 8
    Dim tagLength As Integer = Abfrage.IndexOf(ControlChars.NullChar, tagStart)
    If tagLength = -1 Then
        tagLength = 15
    else
        tagLength = tagLength - tagStart - 1
    End If
    Dim tagText As String = Abfrage.Substring(tagStart, tagLength)
    Beachte aber, dass Du hier mit Zeichenketten arbeitest, die in .NET immer Unicode sind.
    Je nach Variante werden aber in der Datei unterschiedliche Zeichensätze verwendet,
    wenn ich in die Wikipedia schaue. Wodurch es zu Fehlern kommen kann.

    Sicherer kann es sein, zunächst mit einem Byte() Array zu arbeiten
    und danach eine Konvertierung vorzunehmen.

    Da es im Web reichlich Infos zu MP/ID3 gibt schau Dich da mal um.

    Gruß Elmar
    Samstag, 16. Januar 2010 10:11
    Beantworter
  • Hallo Elmar,

    ja die ganzen Wikipedia und auch andere Seiten über ID3 TAG habe ich gelesen.
    Ich komme auch eigentlich ganz gut vorran und vorallem klar.

    Bei mir hapert es nur noch ein wenig am Wissenstand des programmieren.


    ich habe deinen Code, der wie immer Funktioniert, als Funktion umgeschreiben.

    Vilen dank
    Bernd

     Private Function DenTagTextErmitteln(ByVal tagStart As Integer) As String
            '    ' von Elmar Boye
            tagStart = PosDesTAG + 7
            Dim tagLength As Integer = Abfrage.IndexOf(ControlChars.NullChar, tagStart)
            If tagLength = -1 Then
                tagLength = 30
            Else
                tagLength = tagLength - tagStart
            End If
            Dim tagText As String = Abfrage.Substring(tagStart, tagLength)
            Return tagText
    Samstag, 16. Januar 2010 10:52