Microsoft Excel

Herbers Excel/VBA-Archiv

Binärdaten lesen und darstellen | Herbers Excel-Forum


Betrifft: Binärdaten lesen und darstellen von: Thomas
Geschrieben am: 18.12.2009 13:47:14

Hallo Excelperten,
ich möchte eine einfache Binärdatei öffnen, also keine Textdatei, sondern eine Datei, die alle ASCII-Zeichen von 0-255 enthalten kann. Diese Datei ist immer 2048 Byte groß. Jedes byte soll in eine Zelle hinein.
Irgendwie klappt das aber nicht so recht, hier mein bisheriger Code:

Public Sub ReadDataBinary()
    Const ForReading = 1, ForWriting = 2, ForAppending = 3
    Dim fs, f
    
    Dim strEEP As String
    
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.OpenTextFile("Example.bin", ForReading)
    strEEP = f.ReadAll
    f.Close
      
    Dim arrEEP() As Variant
    ReDim arrEEP(127, 15)
    For y = 0 To 127
      For x = 0 To 15
        arrEEP(y, x) = Asc(Mid(strEEP, x + y + 1, 1))
      Next
    Next
    
    [C2].Resize(128, 16) = arrEEP
End Sub

Das Problem ist nun, dass er die ersten Zellen zwar richtig befüllt, aber sich "verrennt", sobald er in der Datei auf die erste "0x00" stößt, was ja normalerweise ein String-Ende darstellt.

Wie kann ich dies umgehen?

Danke schonmal,
Gruß Thomas

  

Betrifft: AW: Binärdaten lesen und darstellen von: Anton
Geschrieben am: 18.12.2009 14:06:39

Hallo Thomas,

so vllt:

Code:

Sub ReadDataBinary()  
  fileToOpen = Application.GetOpenFilename()  
  If fileToOpen = False Then Exit Sub      
  Cells.Clear
  Cells.NumberFormat = "@"
  i = 1: k = 1
  Open fileToOpen For Binary Access Read As #1      
  Do While Loc(1) < LOF(1)  
    Cells(i, k) = Asc(Input(1, #1))  
    k = k + 1
    If k > 16 Then  
      k = 1: i = i + 1
    End If  
  Loop
  Close #1
  Columns.AutoFit
End Sub  



mfg Anton


  

Betrifft: AW: Binärdaten lesen und darstellen von: Thomas
Geschrieben am: 18.12.2009 14:13:40

Hallo Anton,
vielen Dank erst einmal. Es funktioniert. Zwar.
Aber eine ähnliche Lösung hatte ich bereits. Nur dauert es eben sehr lange, bis alles ausgegeben ist. Auch mit Application.Screenupdating = False geht es nicht viel schneller.

Ich werde mir wohl etwas anderes überlegen müssen...

Trotzdem danke!
Gruß


  

Betrifft: Binärdaten lesen und in Tabelle schrieben von: Erich G.
Geschrieben am: 18.12.2009 18:10:16

Hi Thomas,
teste doch mal diese beiden Varianten (im Prinzip eine Kombination aus euren Codes).
Die erste ist variabler, die zweite für genau 2048 Zeichen,
beide sind ungetestet:

Option Explicit

Sub ReadDataBinaryV()
   Dim zz As Long, ss As Long, fileToOpen, arrEEP() As Integer
   
   fileToOpen = "Example.bin" 'Application.GetOpenFilename()
   If Not fileToOpen Then Exit Sub

   zz = 1
   ReDim arrEEP(16, 128)
   Open fileToOpen For Binary Access Read As #1
   Do While Loc(1) < LOF(1)
      If ss < 16 Then
         ss = ss + 1
      Else
         ss = 1: zz = zz + 1
         If zz > UBound(arrEEP, 2) Then ReDim Preserve arrEEP(16, zz + 100)
      End If
      arrEEP(ss, zz) = Asc(Input(1, #1))
   Loop
   Close #1
   If zz <> 128 Then ReDim Preserve arrEEP(16, zz)
   Cells(2, 3).Resize(128, 16) = Application.Transpose(arrEEP)
End Sub

Sub ReadDataBinary2048()
   Dim zz As Long, ss As Long, fileToOpen, arrEEP(16, 128) As Integer
   
   fileToOpen = "Example.bin" 'Application.GetOpenFilename()
   If Not fileToOpen Then Exit Sub

   Open fileToOpen For Binary Access Read As #1
   For zz = 1 To 128
      For ss = 1 To 16
         arrEEP(zz, ss) = Asc(Input(1, #1))
      Next ss
   Next zz
   Close #1
   Cells(2, 3).Resize(128, 16) = arrEEP
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort


Beiträge aus den Excel-Beispielen zum Thema "Binärdaten lesen und darstellen"