| |
Fortgeschrittene ProgrammierungRe: Binäredatei auslesen | | | Autor: Zardoz | Datum: 27.02.10 14:54 |
| Hallo dtrain07,
das solltest du ändern:
Dim XETM, XDMM As String ' XETM ist nicht als Sting definiert
Lst = Split(sBytes, Chr$(0)) ' Die Zeile brauchst du nicht mehr
temp$ = Mid$(sBytes, XETM, XDMM - XETM) ' Der Startposition muss die Länge des
' ersten Suchstrings aufaddiert werden
Textures = Split(temp, "0", -1, vbTextCompare) ' "0" ist nicht gleich Chr$(0). _
Letzteres wäre richtig. Gruss,
Zardoz | |
Binäredatei auslesen | | | Autor: dtrain07 | Datum: 27.02.10 12:27 |
| Hey,
ich arbeite im Moment daran, eine binäre Datei auszulesen. In dieser Werten die Werte in einer Tabelle gepspeichert. Diese Tabelle beginnt bei dem String "XETM" und endet beim String "XDMM". Wenn ich versuche, einen String nach dem anderen auszulesen, schaffe ich maximal einen String, danach krieg ich irgendwie keine Daten mehr, besonders da die Strings immer unterschiedlich lang sind. Hat jemand einen Beispielcode, wie sowas funktionieren könnte?
dtrain07 | |
Re: Binäredatei auslesen | | | Autor: Zardoz | Datum: 27.02.10 13:24 |
| Hallo dtrain07,
wie liest du denn die Daten ein? Wie ist
die Datei aufgebaut?
Gruss,
Zardoz | |
Re: Binäredatei auslesen | | | Autor: dtrain07 | Datum: 27.02.10 13:45 |
| Ich lese sie so ein:
Private Sub ReadBinaryFile(filename As String)
Open (filename) For Binary As #1
Seek #1, 4188 'Position des Strings
sBytes = Space$(128) 'Maximale Größe des Strings
Get #1, , sBytes
Close #1
MsgBox (sBytes)
End Sub Aber es wird immer nur ein String eingelesen, ob wohl der nächste direkt dahinter kommt (es wird mit einem (Hex: '00') getrennt) | |
Re: Binäredatei auslesen | | | Autor: Zardoz | Datum: 27.02.10 14:00 |
| Hallo dtrain07,
du gibst bei Seek immer die selbe Position an, folglich wird
auch immer ab der selben Stelle gelesen. Eine 0 in der Datei
beendet nicht das binäre Einlesen. Es werden immer so viele
Bytes gelesen, wie die Variable Zeichen enthält.
Probier' mal dieses:
Private Sub ReadBinaryFile(filename As String)
Dim i&, sBytes$, Lst$()
Open (filename) For Binary As #1
sBytes = Space$(LOF(1))
Get #1, , sBytes
Close #1
Lst = Split(sBytes, Chr$(0))
For i = 0 To UBound(Lst)
MsgBox Lst(i)
Next i
End Sub Gruss,
Zardoz | |
Re: Binäredatei auslesen | | | Autor: dtrain07 | Datum: 27.02.10 14:14 |
| Hm das Problem ist, das er jetzt die ganze Datei ausließt, ich brauche aber nur den Bereich zwischen den Strings "XETM" und "XDMM". Ich hab versucht die Funktion umzubauen aber irgendwie funktioniert das nicht | |
Re: Binäredatei auslesen | | | Autor: Zardoz | Datum: 27.02.10 14:19 |
| Hallo dtrain07,
nach dem Einlesen der Datei mit Instr nach "XETM" und "XDMM" suchen,
dann den Bereich mit Mid$ ausschneiden und mit Split zerlegen.
Gruss,
Zardoz | |
Re: Binäredatei auslesen | | | Autor: dtrain07 | Datum: 27.02.10 14:33 |
| Ok ich habs nun so versucht:
Private Sub ReadBinaryFile(filename As String)
Dim i&, sBytes$, Lst$()
Dim XETM, XDMM As String
Dim Textures() As String
Dim temp$
Open (filename) For Binary As #1
sBytes = Space$(LOF(1))
Get #1, , sBytes
Close #1
Lst = Split(sBytes, Chr$(0))
XETM = InStr(sBytes, "XETM") 'Position von XETM ermitteln
XDMM = InStr(sBytes, "XDMM") 'Position von XDMM ermitteln
temp$ = Mid$(sBytes, XETM, XDMM - XETM) 'XDMM - XETM = Länge der Strings
Textures = Split(temp, "0", -1, vbTextCompare) 'Strings aber der "0" splitten
MsgBox Textures(0) 'Den ersten String ausgeben
End Sub Aber es funktioniert nicht. Was überseh ich?
//EDIT: Ich seh grad, ich splitte die 0 damit 2x ... daran kann es aber nicht liegen, oder?
Beitrag wurde zuletzt am 27.02.10 um 14:36:42 editiert. | |
Re: Binäredatei auslesen | | | Autor: dtrain07 | Datum: 27.02.10 14:59 |
| Hm ich kriegs immer noch nicht hin, ich kriege als Ausgabe nur "XETM¹" | |
Re: Binäredatei auslesen | | | Autor: Zardoz | Datum: 27.02.10 15:23 |
| Hallo dtrain07,
poste mal den aktuellen Code. Ich sehe es mir heute abend
mal an. Mit den Änderungen sollte es eigentlich funktionieren.
Gruss,
Zardoz | |
Re: Binäredatei auslesen | | | Autor: dtrain07 | Datum: 27.02.10 15:25 |
| Private Sub ReadBinaryFile(filename As String)
Dim i&, sBytes$, Lst$()
Dim XETM As String, XDMM As String
Dim temp$
Open (filename) For Binary As #1
sBytes = Space$(LOF(1))
Get #1, , sBytes
Close #1
XETM = InStr(sBytes, "XETM") 'Position von XETM ermitteln
XDMM = InStr(sBytes, "XDMM") 'Position von XDMM ermitteln
temp$ = Mid$(sBytes, XETM, XDMM - XETM) 'XDMM - XETM = Länge der Strings
Textures = Split(temp, Chr$(0), -1, vbTextCompare) 'Strings ab der "0" splitten
MsgBox Textures(0) 'Den ersten String ausgeben
End Sub Das ist der aktuelle Code, oder hab ich noch was vergessen einzufügen / zu bearbeiten?
Beitrag wurde zuletzt am 27.02.10 um 15:25:51 editiert. | |
Re: Binäredatei auslesen | | | Autor: dtrain07 | Datum: 27.02.10 16:50 |
| Meinst du mit dem "ersten Suchstring" XETM oder den ersten String den ich auslesen will? Falls es das zweite ist, ich kenne die Länge der auszulesenden Strings nicht. | |
Re: Binäredatei auslesen | | | Autor: eierlein | Datum: 28.02.10 00:45 |
| Versuch's mal damit:
PRIVATE SUB ReadBinaryFile( filename AS STRING )
DIM i&, sBytes$, Lst$()
DIM XETM AS STRING, XDMM AS STRING
DIM pXETM AS LONG, pXDMM AS LONG '<----
DIM temp$
OPEN( filename ) FOR BINARY AS #1
sBytes = SPACE$( LOF( 1 ))
GET #1,, sBytes
CLOSE #1
'XETM und XDMM können nicht gleichzeitig String und Zahl sein.
pXETM = INSTR( sBytes, "XETM" ) 'Position (pXETM) von XETM ermitteln
pXDMM = INSTR( sBytes, "XDMM" ) 'Position (pXDMM) von XDMM ermitteln
'
' abc... .XETM.............sls....sdkösK.......................XDMM
' ^-- gesuchter String ---------------------------^
' ^pXETM ^pXDMM
'Startpos. des gesuchten Strings: pXETM + Länge XETM + 1
temp$ = MID$( sBytes, (pXETM + 5), pXDMM - ( pXETM + 5 ))
' pXDMM - (pXETM+5) = Länge der Strings
Textures = Split( temp, CHR$( 0 ), - 1, vbTextCompare ) 'Strings ab der "0" _
splitten
MSGBOX Textures( 0 ) 'Den ersten String ausgeben
END SUB 0 | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevZIP40 Pro DLL
Zippen und Unzippen wie die Profis!
Mit nur wenigen Zeilen Code statten Sie Ihre Anwendungen ab sofort mit schnellen Zip- und Unzip-Funktionen aus. Hierbei lassen sich entweder einzelnen Dateien oder auch gesamte Ordner zippen bzw. entpacken. Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|