Entwickler-Ecke
IO, XML und Registry - Intel HexDateien auslesen
blutengel - Mo 01.03.10 19:15
Titel: Intel HexDateien auslesen
Hallo!
Ich möchte in meinem Programm eine Intel Hex Datei auslesen, um damit später Eprom´s programmieren zu können. Dazu brauch ich:
Zeichen 2-3 :Datenlänge
Zeichen 4-7 :Adresse
Zeichen 7-8 :Recordtyp
Zeichen 9-41 :Daten
Hiermit öffne ich die Datei und zeige den Inhalt in einer RichTextBox an.
Wie kann ich jetzt die einzelnen Zeichen aus der Date auslesen. Ich habe da mal was gehört das man Zeile und Zeichen angeben kann, um das dann in einer Variablemn zu speichern.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| private void dateiLadenToolStripMenuItem_Click(object sender, EventArgs e) { OpenFileDialog openFileDialog1 = new OpenFileDialog(); DialogResult buttonClicked = openFileDialog1.ShowDialog();
if (buttonClicked.Equals(DialogResult.OK)) { fileToOpen = openFileDialog1.FileName; StreamReader reader = new StreamReader(fileToOpen, System.Text.Encoding.Default); daten = reader.ReadToEnd(); reader.Close(); richTextBox1.Text = daten; } } |
MFG
blutengel
c#surfer - Mo 01.03.10 19:45
einzelne Zeilen kannst du z.B. mit StreamReader.ReadLine auslesen. Das herausfischen der einzelnen Bestandteile ist einfach mit String.Substring zu realisieren.
blutengel - Mo 01.03.10 19:50
Danke erstmal für die schnelle Antwort. Aber könntest du mir das vielleicht etwas genauer erklären.Bin noch nicht sehr erfahren mit C#.Vielleicht Anhand eines Codebeispiels oder besser noch anhand meines Codes.
Christian S. - Mo 01.03.10 19:53
Hallo!
Ich denke, mit Zeichen meinst Du jeweils Bytes, oder? Dann hilft Dir eine RichTextBox erstmal gar nichts, mal ganz davon abgesehen dass ein GUI-Element nicht dazu ist, Daten von einer Datei einzulesen.
Ich würde Dir da den Einsatz eines FileStream empfehlen, mit dem kannst Du sowohl einzelne Bytes (ReadByte) als auch Arrays von Bytes (Read) lesen.
Um aus einzelnen Bytes (wie denen für die Datenlänge) wieder "normale" Werte zu machen, kannst Du den BitConverter einsetzen.
Grüße
Christian
blutengel - Mo 01.03.10 19:58
Die RichTextBox dient nur zur Anzeige der Intel - Hex Datei, hat also keinen weiterren Sinn.Die daten stehen ja in der Variablen daten.
Geht das denn so:
Also die letze Zeile?
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| if (buttonClicked.Equals(DialogResult.OK)) { fileToOpen = openFileDialog1.FileName; StreamReader reader = new StreamReader(fileToOpen, System.Text.Encoding.Default); daten = reader.ReadToEnd(); reader.Close(); richTextBox1.Text = daten;
MessageBox.Show(daten);
StreamReader sr = new StreamReader(daten); } } |
Christian S. - Mo 01.03.10 20:05
Was soll die letzte Zeile denn machen? :gruebel:
Häng doch auch bitte mal ne Beispieldatei an, damit man sieht, wie die Datei wirklich aussieht und besser antworten kann.
blutengel - Mo 01.03.10 20:12
Ich dachte erst ich muss einen Neuen Streamreader machen, und dort die bereits geladenen Daten schreiben.Aber wie schon gesagt ich bin noch ziemlich neu,und mit Dateien habe ich in C# bis jetzt noch nicht gearbeitet.
Quelltext
1: 2: 3: 4:
| Intel - Hex Datei :100000007B077401F5B00379FF78FFD8FED9FADBDE :03001000F380FE7C :00000001FF |
blutengel - Mo 01.03.10 21:26
Womit muss ich eigentlich arbeiten. In der Variable daten steht ja die Hex - Datei drin. Kann ich damit überhaupt was anfangen, oder muss ich den Inhalt noch in eine Neue Variable schreiben?
c#surfer - Di 02.03.10 09:14
Hallo blutengel,
ich empfehle dir folgende Vorgehensweise:
1. Erstelle eine Konsolenanwndung (eine Windows Anwendung macht die Sache erstmal nicht einfacher und du kannst dich auf das eigentliche Problem konzentrieren)
2. Lies das Intel-HexFile zeilenweise ein. Beim StreamReader gibt es dazu einfache Beispiele (Stichwort: Lesen aus einer Textdatei) in der Hilfe. (@Christian S.: Ich denke dies ist die einfachste Möglichkeit für blutengel und ihm weitere Möglichkeiten aufzuzeigen würde ihn wahrscheinlich eher verwirren).
3. Nun hast du die Datei zeilenweise als String vorliegen. Und kannst ihn mit dem bereits erwähnten String.Substring zerlegen
Wenn du dies Schritt für Schritt machst wirst du erfolgreich sein. Nutze bitte intensiv die MSDN Hilfe und Literatur (z.B.
http://openbook.galileocomputing.de/csharp/). Dort findest du meist auch Beispielcode.
Viel Spaß!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!