FileRead liest nur 3 Zeichen aus Datei.

  • Hallo Community,
    ich habe ein Problem mit Autoit.

    Ich versuche eine Datei einzulesen um aus ihr einen String auszulesen. Das Problem ist, dass FileRead nur 3 Zeichen liest und nicht das ganze File.

    Im Editor sehen wir den kompletten Ascii-Teil des Files.
    [Blockierte Grafik: http://img21.imageshack.us/img21/7651/imeditor.png
    Im Hexeditor sehen wir den gleichen Ascii-Teil in der Ascii Spalte.
    [Blockierte Grafik: http://img117.imageshack.us/img117/2290/imhexeditor.png]

    Ich habe mir gedacht, dass ich mit Fileread das File einlesen kann und dann mit StringSplit den gewünschten String rausbekomme. Aber wie gesagt FileRead liest nur die ersten 3 Zeichen ein. Was mache ich falsch?

    Einmal editiert, zuletzt von Fame (12. Juli 2009 um 15:29)

  • Im Anhang die Dateien.

    Au3 - Code:

    [autoit]

    $Testfile = FileRead("Testfile.dat") ;Hier kommt nur Lc raus
    $Var = StringSplit($Testfile, "waiting")
    $Var = StringSplit($Var[2], "building")
    MsgBox(64, "Ende", $Var[1])

    [/autoit]

    [Blockierte Grafik: http://img10.imageshack.us/img10/4757/datei.png
    Hier die Datei geöffnet im Editor. Die grünen Markierungen stellen die Splits da und die gelbe Markierung das Ergebnis, welches ausgeschnitten werden soll.

  • [autoit]

    $sFileOpen = FileOpen("Testfile.dat", 0)

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

    $Testfile = FileRead($sFileOpen) ;Hier kommt nur Lc raus
    $Var = StringSplit($Testfile, "waiting")
    $Var = StringSplit($Var[2], "building")
    MsgBox(64, "Ende", $Var[1])

    [/autoit]

    Versuche es mal hiermit ;)

  • [autoit]

    $sFileOpen = FileOpen("Testfile.dat", 0)

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

    $Testfile = FileRead($sFileOpen) ;Hier kommt nur Lc raus
    $Var = StringSplit($Testfile, "waiting")
    $Var = StringSplit($Var[2], "building")
    MsgBox(64, "Ende", $Var[1])

    [/autoit]

    Versuche es mal hiermit ;)

    Es kommt mehr als zuvor raus aber auch nicht viel mehr. Ich probiere es mal mit dem Parameter 4 (Raw). FileOpen konnte ich bisher immer weglassen, daher habe ich es vergessen zu verwenden xD.

    €: Klappt auch nicht D:

  • Ich nehme mal an es ist ein Fehler bei FileRead wahrscheinlich liesst der keine .dat Dateien aus, mach mal das und guck dann mal in die TXT:

    [autoit]

    $Testfile = FileRead("Testfile.dat") ;Hier kommt nur Lc raus
    FileWrite("Testfile.txt", $Testfile)

    [/autoit]

    Bei mir stand das in der TXT drin:

    Code
    LcfDataBase
    ­QAlex SoldierChara1
  • Am Dateiformat liegt es nicht. Die Zeichen in der Textdatei entsprechen den ersten paar Zeichen der Datdatei. Ich glaube, dass entweder die Variable oder die Funktion selbst mit der Größe überfordert ist?

  • Danke für die Antworten.

    Das Problem scheint tatsächlich an der frühzeitigen Erkennung des Dateiendes zu liegen. Ich kann mir aber leider nicht die Datei aussuchen, da diese von einem anderen Programm erzeugt werden. Es ist keine Textdatei sondern eine Datei, welche Binäre und Textstrings enthält. Und ich möchte die Textstrings auslesen.

    Gibt es da eine Möglichkeit? Was hat es mit der Raw-Mode auf sich? (FileOpen(Dateiname, 4))

  • Ich darf keine Dat Dateien hochladen aber ich denke, dass du Zip öffnen kannst. Wenn das nicht geht kannst du dir auch WinRar hier kostenlos runterladen.

    • Offizieller Beitrag

    Hi,

    das Problem ist nicht FileRead, sondern die Anzeige per MsgBox oder ArrayDisplay.

    Siehe hier:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    $Testfile = FileRead(FileOpen("Testfile.dat", 0)) ;Hier kommt nur Lc raus

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

    For $i = 0 TO 31
    $Testfile = StringReplace($Testfile, chr($i), '|')
    Next
    For $i = 123 TO 255
    $Testfile = StringReplace($Testfile, chr($i), '|')
    Next
    $re = StringRegExp($Testfile, '\w{2,}', 3)
    _ArrayDisplay($re)

    [/autoit]

    Mega

  • Vielen Dank an Mega und auch alle anderen die geantwortet haben.
    Das Problem ist gelöst :D

  • Was war das konkrete Problem? Und wie wurde es gelöst?

  • Hallo,
    ah, ok, daß die Steuerzeichen (EOF,Nullbyte) nicht in den Anzeige-Funktionen dargestellt wurden wußte ich. Allerdings ist das auch kein Problem, denn es sind ja Steuerzeichen ^^
    Allerdings ist die Bearbeitung von Strings welche diese Steuerzeichen beinhalten doch problemlos möglich?! In Post#3 war doch garnicht von einer Anzeige die Rede (mal abgesehen von der Msgbox^^).
    Primär geht es doch um den stringsplit() , und der liefert doch ein falsches Ergebnis, da das Array aufgrund fehlendem Flag=1 falsch "gefüttert" wird!
    Mit

    [autoit]

    #include <Array.au3>
    $Testfile = FileRead("Testfile.dat")
    $Var = StringSplit($Testfile, "waiting",1) ;wenn flag=1 nicht angegeben, dann
    $Var = StringSplit($Var[2], "building",1) ;werden ALLE Zeichen als Delimiter angesehen....
    MsgBox(64, "Ende", $Var[1])

    [/autoit]


    funktioniert das nämlich einwandfrei....
    ciao
    Andy

  • Danke für die Antwort, Andy. Gut zu wissen. Die Methode von Mega ist sehr Zeitaufwendig :P.(Bei großen Files)