Gezielt bytes aus .dat auslesen

  • Hi @ all,

    habe vor ein kleines Tool für meinen Sat-Reciver zu schreiben. Allerdings komm ich nicht drauf, wie ich die Informationen zu den Aufnahmen bekomme.
    Sie stehen in der META.DAT. Dazu habe ich folgende Doku gefunden: Hier

    Sie stehen an den entsprechenden Byte in der Datei. Dort ist auch mein Problem.

    Aus dieser Datei will ich den Titel und die Duration auslesen.
    Leider bekomme ich es nicht hin.

    Vielleicht könnt ihr helfen ;)
    Vielen Dank schonmal im Vorraus.

    MfG
    Conan (Nur Mitlesend)
    Schon lange dabei

    Einmal editiert, zuletzt von Conan10 (5. August 2010 um 17:53)

  • Du kannst es entweder sequentiell auslesen oder per FileSetPos an die gewünschte Stelle springen ;)

    Spoiler anzeigen
    [autoit]

    $hFile = FileOpen($sFile, 16)

    [/autoit] [autoit][/autoit] [autoit]

    ;$unknown = FileRead($hFile, 5)
    ;$reserved1 = FileRead($hFile, 7)
    ;$type_of_title = FileRead($hFile, 1)
    FileSetPos($hFile, 0x0d, 0) ; 0 = $FILE_BEGIN
    $title = BinaryToString(FileRead($hFile, 62), 1)
    $hour = FileRead($hFile, 1)
    $minute = FileRead($hFile, 1)
    $second = FileRead($hFile, 1)
    $reserved2 = FileRead($hFile, 4)
    $year = FileRead($hFile, 1)
    $month = FileRead($hFile, 1)
    $day = FileRead($hFile, 1)

    [/autoit] [autoit][/autoit] [autoit]

    ...

    [/autoit] [autoit][/autoit] [autoit]

    FileClose($hFile)

    [/autoit]
  • Erstmal Danke progandy für die schnelle Hilfe ;)

    Nur ein Problem besteht noch, dass er das die Duration als Hexzahl ausgibt. Wandle ich sie um, entsteht dort aber keine Zahl.
    Vielleicht kannst du mir da auch nochmal helfen.
    Ich lad dir mal die Meta mit hoch, vielleicht hilft das :)

  • Duration ist doch in 3 bytes gespeichert. Einmal Stunden, dann Minuten und Sekunden.
    Also geht das (bei Binärdaten mit mehr als einem Byte muss man wegen der Byte-Reihenfolge "Endianness" DLLStructs verwenden):

    [autoit]

    $h = Number(FileRead($hFile, 1))
    $m = Number(FileRead($hFile, 1))
    $s = Number(FileRead($hFile, 1))

    [/autoit]

    Beispiel bei 2byte-Daten:

    [autoit]

    $b = DLLStructCreate("byte[2]")
    $i = DLLStructCreate("short", DLLStructGetPtr($b))
    DLLStructSetData($b, 1, $bytes)
    $ergebnis = DLLStructGetData($i, 1)

    [/autoit]
  • Habe nochmal eine Frage, aber zu einem anderen Thema ^^
    Und zwar will ich einige Dateien zusammenkopieren. Dazu nutze ich _RunDOS mit folgendem Befehl:
    Copy /b C:\*****\REC.ts+C:\*****\REC.01 C:\Users\****\Desktop\Test\Output.ts
    Nur erstellt er keine Datei ??
    Habe Hier auch ein ähnliches Skript gefunden, aber trotzdem geht es nicht.
    Könnte es sich jemand nochmal das mal angucken :rolleyes:
    Komm da nicht weiter. Habe schon mehrere Varianten der Methode ausprobiert, aber alle gehen nicht :(

    Edit:
    Geht jetzt!
    Hatte die " für die Pfade vergessen ^^

    MfG
    Conan (Nur Mitlesend)
    Schon lange dabei

    Einmal editiert, zuletzt von Conan10 (5. August 2010 um 17:53)

  • Man darf es nur nicht fehleranfällig machen ^^
    Außerdem finde ich das sich ein externer Prozess besser für mein Vorhaben eignet ;)

    MfG
    Conan (Nur Mitlesend)
    Schon lange dabei

  • Nochmal zum zusammenfügen von TS-Streams mittels "Copy /b"-Befehl;

    Die daraus entstehende Datei kann nicht von jedem Tool wiedergegeben werden. Der interne Index ist nicht mehr fortlaufend steigend. Ich mussteden Fehler beim meinem Videokonverter-Projekt selber erst erkennen.

    Nutze zum Zusammenfügen von Videodateien lieber den Mencoder (z.B. "mencoder.exe -idx -ovc copy -oac copy")

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"