# Intel HEX file auslesen und in  txt speichern



## beso (18. November 2005)

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. 

```
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 

```
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.


----------



## mage (18. November 2005)

Du bist im falschen Forum gelandet -> DotNet-Forum


----------



## mage (18. November 2005)

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.


----------



## beso (18. November 2005)

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.


----------



## mage (18. November 2005)

Aber die Zeile hast du komplett ?

Wenn die Anzahl der Zeichen fest sind kannst du folgende Vorgehensweise probieren.

```
lbl_Laenge = lbl_AllData.Text.Substring(1, 2) ' Startposition, Anzahl Zeichen
lbl_Adresse = lbl_AllData.Text.Substring(3, 3) 
...
```


----------



## beso (18. November 2005)

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. 

```
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.


----------



## beso (21. November 2005)

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:

```
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 ?


----------



## mage (21. November 2005)

Vorher auf Nothing prüfen 
Besser wäre aber vermutlich die Schleife auf Kopfgesteuert um zuändern.

```
lbl_Laenge.Text = sr.ReadLine
  While Not sText is Nothing
      lbl_Laenge.Text = ..
  Wend
```


----------

