vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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)
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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¹"
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Binäredatei auslesen 
Autor: Zardoz
Datum: 27.02.10 16:33

Hallo dtrain07,
ja es fehlt noch was. Wie ich schon geschrieben habe:
Zitat:


Der Startposition muss die Länge des ersten Suchstrings aufaddiert werden

Gruss,

Zardoz

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel