Re: Daten schreiben in txt-File
From: Peter Götz (gssg_nospam_at_t-online.de)
Date: 08/23/04
- Next message: Torben Kubler: "Suche nach Subfolder"
- Previous message: Torben Kubler: "Suche nach Subfolder"
- In reply to: Ahmed Martens: "Re: Daten schreiben in txt-File"
- Next in thread: Ahmed Martens: "Re: Daten schreiben in txt-File"
- Reply: Ahmed Martens: "Re: Daten schreiben in txt-File"
- Messages sorted by: [ date ] [ thread ]
Date: Mon, 23 Aug 2004 11:46:43 +0200
Hallo Ahmed,
> Eine Frage zum Abschluss. Wenn meine Strukturvariable 2 Integer-Werte
> beinhaltet und diese per Random-Zugriff und einer Put-Anweisung erstellt
> wurde, können diese dann ausgelesen werden ?
Ja, natürlich können sie ausgelesen werden.
Die Get-Anweisung beim Zugriff auf eine solche Datei liest die Daten ja
auch.
Die beiden Integerwerte werden ganz einfach als jeweils 2 Byte pro Integer
gespeichert und aus diesen 2 Bytes lässt sich ohne grossen Aufwand der
jeweilige Integerwert ermitteln, wenn man weiss, dass Windows diese
Integerwerte in Little-Endian-Anordnung speichert.
Wenn Du Dir einen solchen Integerwert in hexadezimaler Schreibweise
anschaust, siehst Du sofort die beiden Bytes
debug.Print hex$(23589) --> 5C25
Das niederwertige Byte hat also den Wert &h25 (dezimal 37)
das hochwertige Byte hat den Wert &h5C (dezimal 92)
Windows speichert solche Werte im "Little-Endian"-Format. Das heisst zuerst
kommt das niederwertige Byte und dann das höherwertige Byte.
Aus 5C25 wird also 255C.
Beim Lesen musst Du die beiden Bytes einfach nur wieder vertauschen und zu
einem Wert zusammensetzen.
Wenn Du Dir nach Ausführung des nachfolgenden Programmbeispiels den Inhalt
des Bytearrays mal im Überwachungsfenster anschaust, dann siehst Du in den
Bytes 2 und 3 wieder die Werte 37 (&h25) und 92 (&h5).
Schau Dir mal das nachfolgende Beispiel an.
Mit einem Klick auf die Form wird zuerst im Modus "Random" ein Datensatz in
die Datei geschrieben.
Anschliessend wird die Datei im Modus "Binary" geöffnet und der Inhalt der
Datei in ein ByteArray eingelesen.
Anschliessend werden aus dem ByteArray die beiden Integerwerte und der Text
ausgelesen.
' /// Beginn Code Form1
Option Explicit
Private bArray() As Byte
Private strFile As String
Private Type MyType
Wert1 As Integer
Wert2 As Integer
Text As String * 12
End Type
Private Sub WriteFile()
Dim FN As Integer
Dim MT As MyType
On Error Resume Next
Kill strFile
On Error GoTo 0
FN = FreeFile
Open strFile For Random As #FN
MT.Wert1 = 123
MT.Wert2 = 23589
MT.Text = "abcdefghijkl"
Put #FN, , MT
Close #FN
End Sub
Private Sub ReadFile()
Dim i As Long
Dim k As Long
Dim intBuffer As Integer
Dim FN As Integer
Dim strBuffer As String
FN = FreeFile
Open strFile For Binary As #FN
ReDim bArray(LOF(FN) - 1)
Get #FN, , bArray
Close #FN
' Integerwert Wert1 aus Array lesen
intBuffer = "&H" & Hex$(bArray(1)) & Hex$(bArray(0))
strBuffer = strBuffer & CStr(intBuffer) & " "
' Integerwert Wert2 aus Array lesen
intBuffer = "&H" & Hex$(bArray(3)) & Hex$(bArray(2))
strBuffer = strBuffer & CStr(intBuffer) & " "
' Text Byteweise lesen
For i = 4 To 15
strBuffer = strBuffer & Chr$(bArray(i))
Next i
MsgBox "Satz gelesen:" & vbCrLf & _
strBuffer, vbInformation
End Sub
Private Sub Form_Click()
WriteFile
MsgBox "Datei " & strFile & " wurde geschrieben" & _
vbCrLf & "und wird jetzt gelesen.", vbInformation
ReadFile
End Sub
Private Sub Form_Load()
strFile = "D:\R_Test.dat"
End Sub
' \\\ Ende Code
Hat sich nun der Aha-Effekt eingestellt?
Wenn der Satzaufbau einer solchen Datei bekannt ist, dann ist es auch kein
Problem mehr die einzelnen Bytes in dieser Datei richtig zu interpretieren.
Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tips u. Beispielprogrammen)
- Next message: Torben Kubler: "Suche nach Subfolder"
- Previous message: Torben Kubler: "Suche nach Subfolder"
- In reply to: Ahmed Martens: "Re: Daten schreiben in txt-File"
- Next in thread: Ahmed Martens: "Re: Daten schreiben in txt-File"
- Reply: Ahmed Martens: "Re: Daten schreiben in txt-File"
- Messages sorted by: [ date ] [ thread ]
Relevant Pages
|