Intel HEX file auslesen und in txt speichern

beso

Mitglied
Als erstes sorry wenn ich dumme Fragen stelle aber mit VB fang ich bei 0 an.

Ich will intel hex files auslesen. Und z.B. die länge, Adresse, Recordtyp, data, jeweils in einen Label darstellen.
Danach will ich auf einen Button Save drücke und die Zeile die ich zuvor ausgelesen habe in eine txt datei speichern. Und zwar so:
Laenge:xxxxxAdresse:xxxxx…….. x = die werte die ich aus der hex gelesen habe und in den lebels stehen.
Das ganze soll dann in so einen Namen gespeichert werden.
Adresse_Reordtype_YYMMDDHHMMSS.txt

Also ich bin so weit das ich eine Datei Auslese und nur in einen Label dastelle.
Code:
 Private Sub btnOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOpen.Click
        Dim openFileDialog1 As New OpenFileDialog
        openFileDialog1.Filter = "Binary Files .bin |*.bin"
        openFileDialog1.Title = "Select a Binary File"
If openFileDialog1.ShowDialog() = DialogResult.OK Then
            If openFileDialog1.FileName <> "" Then
 txtFile.Text = openFileDialog1.FileName
                Dim sr As New System.IO.StreamReader(openFileDialog1.FileName)
                lbl_AllData.Text = sr.Read

                ' Funktioniert nicht
                'lbl_Laenge.Text = sr.ReadLine  ' Zeile 1-2
                'lbl_Adresse.Text = sr.ReadLine ' Zeile 3- 6
                'lbl_type.Text = sr.ReadLine    ' Zeile 7-8
                'lbl_DataDD.Text = sr.ReadLine  ' Zeile 9-10
                'lbl_RealData.Text = sr.ReadLine 'mus bestimmt werden ? 
                'lbl_CC.Text = sr.ReadLine      ' letzten 2

                MessageBox.Show("File Readed!")
                sr.Close()
            End If
        End If
    End Sub
Speichern
Code:
   Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStart.Click
Dim OutputFileName As String
        Dim OutputText As String
        OutputFileName = "C:\hex\Prf_Adresse_YYYY.txt"
        Dim myStream As New IO.StreamWriter(OutputFileName, False)
        OutputText = "text: " + lbl_Data.Text
        myStream.Write(OutputText)
        myStream.Close()
 End Sub
wenn jemand eine idee hat wurde ich mich sehr freuen.
 
Was ist genau das Problem ?
Readline klappt vermutlich nicht weil deine Datei die du ausliesst nicht mit Zeilenumbrüchen (Carriage Return und Line Feed) arbeitet.
 
so eine zeile soll ausgelesen werden.
10246200464C5549442050524F46494C4500464C33
von 1-2 in lbl_Laenge, 3-6 in lbl_Adresse,7-8 in lbl_type, 9-10 iin lbl_DataDD,.. darstellen.
Wenn ich dies in eine txt Speicher dann soll die txt so aussehen.
Laenge:10Adresse:2462Type:00Data:46,....
der Filename soll so Typ_Adresse_YYYYMMDDHHMMSS.txt gepeichert werden.
 
Aber die Zeile hast du komplett ?

Wenn die Anzahl der Zeichen fest sind kannst du folgende Vorgehensweise probieren.
Code:
lbl_Laenge = lbl_AllData.Text.Substring(1, 2) ' Startposition, Anzahl Zeichen
lbl_Adresse = lbl_AllData.Text.Substring(3, 3) 
...
 
danke mage
das lesen hat soweit funktioniert.
Will die Werte noch auf ein csv datei speichern. Das geht auch aber nur in eine Zeile.
Ich willl jeden Wert in eine eigene Zelle speicehrn.?hat jemand eine Idee?
Statt Perfix soll ein dezimalwert in der ersten Zelle hochgezählt werden.
Code:
 Dim OutputFileName As String
 Dim OutputText As String OutputFileName = "C:\data.csv"
 Dim myStream As New IO.StreamWriter(OutputFileName, False)
        OutputText = " Perfix" _
                     " typ:" + lbl_type.Text + _
                     " address:" + lbl_Adresse.Text + _
                     "data:" + lbl_RealData.Text
        myStream.Write(OutputText)
        myStream.Close()
danke im vorraus.
 
Die obere Frage habe ich schon gelöst auch wenn's lange gedauert hat ;). Einfach einen ; verwenden.

Sorry aber habe noch eine weitere Frage:
Bekomme einen 'System.ArgumentOutOfRangeException' Fehler, weil ich den letzten Wert lese und der ist Leer:
Code:
Do
lbl_AllData.Text = sr.ReadLine
            lbl_Laenge.Text = lbl_AllData.Text.Substring(1, 2)…
……
.........
…. Loop Until lbl_ AllData.Text Is Nothing
'While lbl_Data.Text <> "" wurde auch nicht funktionieren weil am Anfang lbl_AllData leer ist.

Hat jemand eine Idee wie man den ArgumentOutOfRangeException Fehler behandelt. Dh. wenn keine Daten mehr zum lesen/ schreiben sind wie geht man dann vor ?
 
Vorher auf Nothing prüfen :)
Besser wäre aber vermutlich die Schleife auf Kopfgesteuert um zuändern.
Code:
  lbl_Laenge.Text = sr.ReadLine
  While Not sText is Nothing
      lbl_Laenge.Text = ..
  Wend
 
Zurück