GRRR, ich werde noch wahnsinnig! Mein Script soll eine Datei mit FileRead auslesen, aber das Ergebnis sind nur die ersten 4 Zeichen, obwohl ich kein Count-Wert angegeben habe! Und @error meint, es ist alles richtig.
Weiß jemand warum das nicht gehen könnte?
FileRead liest nur die ersten 4 Zeichen
-
- [ offen ]
-
Luke4321 -
27. November 2009 um 17:46 -
Geschlossen -
Erledigt
-
-
poste doch mal dein script und gegebenenfalls die txt datei
-
Ist keine txt Datei aber ich poste das trotzdem mal
[autoit]InetGet("http://toki-o.de/ManiaLink/TM/little lol looping.Challenge.Gbx",@TempDir&"\LoeschMich.Gbx")
[/autoit]
MsgBox(0,"",FileRead(@TempDir&"\LoeschMich.Gbx"))
FileDelete(@TempDir&"\LoeschMich.Gbx") -
Wenn ich mal davon ausgehe, dass gbx für Game Data Package steht, wirst du es wohl kaum wie ne "normale" File auslesen können. Probiers Fileread mal im RAW modus.
-
Was ist denn der RAW Modus von FileRead? Und dass Format ist eins von einem Computerspiel.
-
[autoit]
[/autoit]
$hFile = FileOpen ( "filename", 4 )
FileRead ($hFile)Mal nebenbei, was versprichst du dir vom auslesen der Datei?
-
Funktion FileOpenFileOpen ( "filename", mode )
Parameter
filename Dateiname der zu öffnenden Textdatei. mode Modus (Lesen oder Schreiben), in dem die Datei geöffnet werden soll. Kann auch eine Kombination aus folgenden sein:
0 = Lesemodus (read mode)
1 = Schreibmodus mit Anhängen an die vorhandene Datei (write mode)
2 = Schreibmodus mit Löschen des vorherigen Inhaltes (write mode)
4 = Lesen im direkten (raw) Modus
8 = Anlegen der Verzeichnisstruktur, wenn sie noch nicht besteht (siehe Bemerkungen).
16 = Erzwinge binäres (byte) Auslesen und Schreiben für FileRead und FileWrite
32 = Verwende Unicode-UTF16 mit Little-Endian-Kodierung um Text mit FileWrite und FileWriteLine zu schreiben (Standard ist ANSI)
64 = Verwende Unicode-UTF16 mit Big-Endian-Kodierung um Text mit FileWrite und FileWriteLine zu schreiben (Standard ist ANSI)
128 = Verwende Unicode-UTF8 Kodierung um Text mit FileWrite und FileWriteLine zu schreiben (Standard ist ANSI)
Beide Schreibmodi erstellen die Datei, wenn sie noch nicht existiert. Der Verzeichnispfad muss bereits vorhanden sein (außer Modus "8" - siehe Bemerkungen).Steht 1 zu 1 so in der hilfe -.-
und mit so kryptischen dateien wirste vllt probleme bekommen? was genau willst du denn machen?
-
Wenns schon am AUSLESEN der Daten hapert, dann viel Spass beim Ändern....
Wozu gibts eigentlich HEX-Editoren? -
Hmmm, ich hab mir die gbx-Dateien mal mit dem hex-editor angesehen. An der 4. Stelle war bei den paar Versuchen immer 0.
In C enden Strings immer mit einer 0. Daran erkennt das Programm, wann ein String zuende ist. Es kann sein, dass das bei AutoIt auch so ist.PS: Wenn du eine Seite kennst, in der das gbx-format von 3d-Modellen dokumentiert ist, schick mirt mal den Link.
-
Keiner der Parameter funktioniert (16 ist aber lustig).
Ich brauch das, weil in der Datei der Anfang "normal" geschrieben ist und darin kommt dieser Bereich drin vor:
author="xxluke"/><desc
Und das "xxluke" brauche ich. -
Schick uns mal bitte die File oder Ausschnitte, sodass wird das nachvollziehen und selber mal unser Glück versuchen können ;).
-
Das wäre eine erste Zeile:
CodeGBX BUCR 0§, 0- 0š 0 0ñ €0¿) € ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿê ÿÿÿÿ € UidrDzF5JqqxHc6Ap70xIZ_Qyni @ Stadium € marthog Unbenannt @ Night @ @ Nadeo @ í <header type="challenge" version="TMc.6" exever="2.11.11"><ident uid="UidrDzF5JqqxHc6Ap70xIZ_Qyni" name="Unbenannt" author="marthog"/><desc envir="Stadium" mood="Night" type="Race" nblaps="0" price="1770" /><times bronze="-1" silver="-1" gold="-1" authortime="-1" authorscore="-1"/><deps><dep file="Skins\Stadium\CircuitScreen\Up.bik"/><dep file="Skins\Stadium\AirShip\TMU.zip"/><dep file="Skins\Any\Advertisement\SignLeft.bik"/><dep file="Skins\Stadium\Inflatable\Black.zip"/></deps></header> ) <Thumbnail.jpg>ÿØÿà JFIF ÿÛ C $.' ",#(7),01444'9=82<.342ÿÛ C 2!!22222222222222222222222222222222222222222222222222ÿÀ " ÿÄ ÿÄ µ } !
-
Ein paar Infos zum Dateiformat gibt es hier: http://en.tm-wiki.org/wiki/GBX
-
Hallo, habe mal ein kleines Script zur Verdeutlichung des Vorgehens bei Bearbeitung von "Binärdateien" geschrieben und auch kommentiert, was wo und warum passiert....
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
$datei = "test.gfx"$binfile = FileOpen($datei, 18) ;eine Binärdatei mit zufälligen Daten schreiben
[/autoit] [autoit][/autoit] [autoit]
$binstring = ""
For $i = 1 To 50 ;zufällige "Binärdaten" schreiben
$binstring &= Chr(Random(1, 255, 1))
Next
$binstring &= Chr(0) ;ein nullbyte kennzeichnet bei einer TEXTDATEI das Ende, kann aber in einer Binärdatei als ganz normales Zeichen vorkommen
$binstring &= @CRLF
$binstring &= "Hallo, hier ist ein Text mitten in der Binärdatei!" ;ein Text wird in die Binärdaten eingefügt
$binstring &= @CRLF
For $i = 1 To 50 ;zufällige "Binärdaten" schreiben
$binstring &= Chr(Random(0, 255, 1))
NextFileWrite($binfile, $binstring) ;schreibt eine "Binärdatei", welche aber auch Text enthält
[/autoit] [autoit][/autoit] [autoit]FileClose($binfile)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
ShellExecuteWait("scite.exe", $datei) ;Dateiinhalt in Scite darstellen;********************************************************************
[/autoit] [autoit][/autoit] [autoit]
;Binärdatei laden und das Wort "Text" durch das wort "Platzhalter" ersetzen
$binfile = FileOpen($datei, 16) ;Datei öffnen
$binstring = FileRead($binfile, FileGetSize($datei)) ;liest Daten im HEX-Format, alle Zeichen in der Datei
FileClose($binfile);MsgBox(0, 'Darstellung Dateiinhalt im Hexformat',$binstring)
[/autoit] [autoit][/autoit] [autoit]$string = BinaryToString($binstring) ;Hexdaten umwandeln in einen String
[/autoit] [autoit][/autoit] [autoit]#Region Nur zur Info, wie man den gesamten Dateiinhalt anzeigen kann, für das eigentliche Ersetzen unnötig
[/autoit] [autoit][/autoit] [autoit]
;die Stringlänge ist 151 byte, es werden aber nur die ersten 50 Byte in einer Msgbox angezeigt, denn das 51. Byte ist ein Nullbyte....
MsgBox(262144, "Vergleich Scite / Messagebox AutoIt", "In Scite werden die Nullbytes durch NUL-Zeichen ersetzt, die gesamte Datei ist lesbar." & @CRLF & @CRLF & _
"Die Darstellung in der Messagebox erfolgt nur bis zum ersten Nullbyte an Position " & StringInStr($string, Chr(0)) & ", siehe unten! " & @CRLF & _
"Allerdings ist das Wort ""Text"" in der Datei an der Position " & StringInStr($string, "Text") & " enthalten!" & @CRLF & _
"Um in einer Msgbox auch den gesamten Dateiinhalt darstellen zu können, muß man die Nullbytes ersetzen!" & @CRLF & @CRLF & $string)
;die DARSTELLUNG per Msgbox oder anderen Darstellungen funktioniert nur bis zum nächsten NULLBYTE! Der String wird aber dadurch nicht verändert!
$replace = StringReplace($string, Chr(0), "CHR(0)") ;ersetzt alle Nullbytes mit dem Text CHR(0), damit man den gesamten Dateiinhalt darstellen kann
MsgBox(262144, "Beispiel zur Darstellung des gesamten Dateiinhaltes in einer Msgbox", "Die Nullbytes wurden durch den String ""CHR(0)"" ersetzt. Der enthaltene Text ist nun auch in einer Msgbox lesbar..." & @CRLF & @CRLF & $replace) ;Der Dateiinhalt ist nun "lesbar"
#RegionMsgBox(0, "Das Wort ""Text"" wird nun in der Datei ersetzt...", "Bitte OK drücken!")
[/autoit] [autoit][/autoit] [autoit]
$replace2 = StringReplace($string, "Text", "Platzhalter", 0, 2) ;man kann den Text im String ersetzen/verändern, allerdings nicht mit stringregexp()
$binfile = FileOpen($datei, 18) ;Dateihandle holen....
FileWrite($binfile, $replace2) ;... Daten im HEX-Format schreiben
FileClose($binfile)ShellExecuteWait("scite.exe", $datei)
[/autoit] [autoit][/autoit] [autoit]MsgBox(0, "Ersetzt", "Das Wort ""Text"" wurde durch ""Platzhalter"" ersetzt! In Scite sieht man das Ergebnis!")
[/autoit]