Binarydatei in Array einlesen

  • Hallo,

    ich möchte eine Datei in ein Array einlesen. Dies ist aber keine reine Textdatei und hat auch keine klaren Trennzeichen. Sie ist jedoch strukturiert. Besteht z.b. aus x Datensätzen zu je 50 Zeichen (Binär- nicht ASCII), wovon dann in das Array immer je ein Datenfeld von Zeichen 3 bis 7, Zeichen 15 bis 27, Zeichen 31 und Zeichen 35-45 eingelesen werden soll. (Ist nur ein Beispiel).
    Wie dies mit ASCII Dateien und Trennzeichen funktioniert, weiß ich. Auch ohne Trennzeichen könnte ich die gesamte Datei als String einlesen un dann mit stringfunktionen die entsprechenden Teile herauspicken (wenn auch sehr umständlich).
    Aber ich habe in der Beschreibung keine Funktion gefunden, mit der ich dies mit Binary-Dateien tun kann. :(
    Es muß auch nicht unbedingt in ein Array eingelesen werden, es würde schon reichen wenn ich angeben könnte "Lese von der Datei xxx ab Zeichen Nr. von 15 bis Nr. 27".
    Vielleicht gibt es ja eine UDF dazu?

    Danke schon mal

    Peter

  • [autoit]

    $Oeffnen_Banlist = FileOpen("ServerBans.cfg", 0)
    $Zeilen_nummer = ("1")
    While 1
    Global $Zeile = FileReadLine($Oeffnen_Banlist)
    $Zeilen_nummer = $Zeilen_nummer + 1
    If @error = -1 Then ExitLoop
    WEnd
    $Zeilen_nummer = $Zeilen_nummer - 2
    $Letzte_Zeile = FileReadLine($Oeffnen_Banlist,$Zeilen_nummer)
    MsgBox(0,"",""&$Letzte_Zeile)

    [/autoit]

    kannte tortzdem als file öffnen und auslesen

    das script würde jetz sagen wie viel zeilen es gesammt hat und daraufhin kanst du ja bestimmen von wo es auslesen soll

    mit file read line

  • Nein, die Daten sind nicht als Zeilen definiert, sondern durch die Stellung in der Datei.

    Peter

  • wäre es nicht möglich die datei zu posten das man sie sich angugen kann als anhang weil so auf die schnelle was zu sagen ohne die datei zu sehen .......

  • Das wäre möglich (morgen), aber sinnlos. inder Datei erkennst du nichts. es ist eine Binärdatei wie gesagt. Du kannst sie zwar in einen Hex-Editor laden - nur was nützt das?
    Wie gesagt- aus einer Binärdatei (wie z.b. eine dll oder exe) will ich bestimmte Stellen herausholen bzw wieder verändert hineinschreiben. Da gibt es nicht viel zu sehen.
    (Zur Anmerkung: die Datei ist keine ausführbare Datei, sondern eine Parameterdatei eines speziellen Programms).

  • fällt mir dan auch nix anderes ein im moment ich schlafe mal drüber das hilft immer

  • Du willst also zuzusagen Dateien patchen. Ich weiß nicht, ob ich (wir) das hier unterstütze(n). Vllt meldet sich ja mal ein Mod oder Admin hier in diesem Thread und sagt was Sache ist. Ich meinerseits würde dir zu diesem thema nicht weiterhelfen.


    Dateien patchen an sich ist nicht so schlimm. Ich wüsste aber gerne, warum die Datei geändert werden soll und für welches programm das gedacht ist. Dann kann ich entschieden, ob ich helfen soll.
    Allgemein gibt es ja FileOpen im BinaryMode und FileRead mit Angabe der auszulesenden Anzahl von Bytes.

  • Hallo,

    ich habe die Lösung schon selbst gefunden. Ich hatte "nur" die Deutsche Hilfedatei - und da steht von den ganzen Binaryfunktionen nichts drin. In der englischen steht alles, was ich brauche.
    Im übrigen hätte der Name des Programms euch nichts genutzt. Ihr werdet es kaum kennen. Ist ein Spezialprogramm zum Auslesen von speziellen Meßgeräten. Wer dabei "böses" denkt, dem kann ich nur sagen "Was ich selber denk und tu - das trau ich andern zu" ^^ .

    Also - vielen Dank für Eure Mühe und Zeit.

    Peter

  • und wie ist denn nun die lösung? ist vielleicht für alle anderen auch ganz interessant! habe hier auf der arbeit nämlich ein ähnliches problem...

  • Das sind die wichtigsten Einstellungen, denke ich:
    zum lesen
    FileOpen -> Binary (Flag 16) (lesen)
    FileRead -> kann man die Anzahö der Bytes zum Auslesen angeben
    BinaryMid -> Teile aus Binär rausholen

    zum schreiben
    FileOpen Flag 18 (Binary überschreiben, alten Inhalt löschen)
    FileWrite