Einzelne Bytes aus Fremddatei in Excel einlesen
Hallo,
ich habe folgendes Problem:
Ich möchte einzelne Bytes aus einer Datei in Excel einlesen und statistisch auswerten.
Das funktioniert auch soweit mit folgendem VBA-Script:
>Sub dateiimport()
>Dim lngI As Long 'Zähler für Schleife
>lngMax = 16
>dateinummer = FreeFile 'freie Dateinummer ermitteln
>TextSource = Application.GetOpenFilename 'Dateinamen und Pfad ermitteln
>If TextSource = False Then Exit Sub
>Open TextSource For Input As #dateinummer 'Datei lesend öffnen
> Line Input #dateinummer, zeile 'auslesen einer Zeile in die Variable zeile
>For lngI = 1 To lngMax
> Einzelbyte = Mid(zeile, lngI, 1) 'Einzelbyte auslesen
> ActiveSheet.Cells(lngI, 1).Value = Einzelbyte 'Einzelbyte in Zelle eintragen
>Next lngI
>Close #dateinummer 'Datei schließen
>End Sub
In der Datenquelle (es handelt sich um ein SMF) habe ich folgende Bytes als Hexwerte in einer anderen Datei stehen:
4D 54 68 64 00 00 00 06 00 00 00 01 00 60 4D 54
das Problem ist nur das mir die Nullbytes nicht ausgelesen und nicht nur das sondern auch unterschlagen werden der Output sieht so aus:
4D 54 68 64 06 01 60 4D 54
Wer kann mir helfen?
Antwort schreiben
Antwort 1 von BigF vom 25.09.2020, 18:44 Options
hi SchalUndRauch
wie wärs, wenn du den ASCII-Code auslesen lässt ?
> Einzelbyte = Asc(Mid(zeile, lngI, 1)) 'Einzelbyte auslesen
Gruss BigF
Antwort 2 von SchalundRauch vom 25.09.2020, 19:33 Options
Hi BigF,
das hilft mir nicht weiter.
Denn dann bekomme ich nur die ausgelesenen die Hex-Werte als Dez-Werte und mit den nicht ausgelesenen bin ich keinen Schritt weiter.
Schöne Grüße
Antwort 3 von lorf55 vom 26.09.2020, 09:56 Options
Hallo SchalUndRauch,
ich könnte mir vorstellen, dass die MID-Funktion das Nullzeichen einfach als Kennung für das Stringende ansieht und deshalb nichts zu sehen ist.
Wenn du Byte für Byte lesen möchtest, solltest du das direkt mit Input (oder auch vielleicht auch InputB) machen:
Dim Zeichen1
Open TextSource For Input As #1 ' Datei öffnen.
Do While Not EOF(1) ' Schleife bis Dateiende.
Zeichen1 = Input(1, #1) ' Ein Zeichen lesen.
ActiveSheet.Cells(lngI, 1).Value = Zeichen1 'Einzelbyte in Zelle eintragen
Loop
Close #1 ' Datei schließen.
Gruß
lorf
Antwort 4 von lorf55 vom 26.09.2020, 09:58 Options
Verschenke ein "auch" solange der Vorrat reicht. :-)
Antwort 5 von SchalUndRauch vom 26.09.2020, 14:23 Options
Hallo lorf55,
aber "auch" (danke dafür) das hilft mir nicht weiter, hatte ich vorher schon ausprobiert. Kann dir aber im Gegenzug ein "else" anbieten . :-}
Wo sind denn hier die VB-Profis?
Schöne Grüße
Antwort 6 von lorf55 vom 26.09.2020, 22:57 Options
Stimmt! Die Hilfe lügt! Input liest erst ab dem 1.Byte, das kein 00-Byte ist, wenn man
as INPUT
angibt. Wenn man aber statt dessen
as Binary
nimmt, klappts auch mit den Nullen (zumindest bei mir; jetzt habe ich doch mal getestet):
Sub dateiimport2()
Dim Zeichen1
Dim lngI As Long 'Zähler für Schleife
lngMax = 16
dateinummer = FreeFile 'freie Dateinummer ermitteln
TextSource = Application.GetOpenFilename 'Dateinamen und Pfad ermitteln
Open TextSource For Binary As #1 ' Datei öffnen.
lngI = 0
Do While (lngI < lngMax) And Not EOF(1) ' Schleifenanfang
lngI = lngI + 1
Zeichen1 = Input(1, #1) ' Ein Zeichen lesen.
ActiveSheet.Cells(lngI, 1).Value = Hex(Asc(Zeichen1)) 'Einzelbyte in Zelle eintragen
Loop ' Schleifenende
Close #1 ' Datei schließen.
End Sub
Naja bin nicht so der VB-Profi, aber vielleicht reichts ja für dich.
Gruß
lorf
Antwort 7 von SchalUndRauch vom 27.09.2020, 16:45 Options
Hi lorf55,
ok die Profis waren schon da :-), vielen Dank für die Hilfe, funktioniert super.
Schöne Grüße