Guten Morgen!
Folgendes Problem:
Ich soll ein Programm schreiben, dass eine sog. PRN-Datei einliest.
Die Datei enthält ziemlich viel Text, ich muss sobald eine "section" beginnt die relativen Adressen zu absoluten Adressen (Hex) umrechnen.
Das Problem ist, es können eine oder mehrere Sektionen in einer Datei sein und irgendwie kriege ich das nicht so recht hin.
Beispiel für eine Sektion:
Das ist jetzt manuell von Hand berechnet, Berechnet werden muss bzw. errechnet werden muss der zweite Teil, also nach der Zeilennummerierung (so in der Datei vorhanden!) bspw. B5A9 etc.
Beispiel einer weiteren Section (selbe Datei):
Mein Code bisher:
Das Ergebnis:
Task1_Data wird gemacht, task1_code jedoch nicht.
Hat jemand eine Idee, wie ich den Fehler beheben kann?
Sitze jetzt seit zwei Tagen daran und komme keinen Schritt weiter und bin wirklich am verzweifeln...
Vielen Dank,
Musti
Folgendes Problem:
Ich soll ein Programm schreiben, dass eine sog. PRN-Datei einliest.
Die Datei enthält ziemlich viel Text, ich muss sobald eine "section" beginnt die relativen Adressen zu absoluten Adressen (Hex) umrechnen.
Das Problem ist, es können eine oder mehrere Sektionen in einer Datei sein und irgendwie kriege ich das nicht so recht hin.
Beispiel für eine Sektion:
Quellcode
- 337 B513 R section task1
- 338
- 339 B513 0080 ds 128 ;kommentar
- 340 00000080 tos equ *
- 341
- 342 ****************************************
- 343 * *
- 344 * Variablen *
- 345 * *
- 346 ****************************************
- 347
- 348 B593 0002 adc1 ds 2
- 349 B595 0002 adc2 ds 2
- 350 B597 0002 adc3 ds 2
- 351
- 352 B599 0002 timer1 ds 2
- 353 B59B 0002 timer2 ds 2
- 354 B59D 0002 timer3 ds 2
- 355 B59F 0002 timer4 ds 2
- 356 B5A1 0002 timer5 ds 2
- 357 B5A3 0002 timer6 ds 2
- 358 B5A5 0002 timer7 ds 2
- 359 B5A7 0002 timer8 ds 2
- 360 B5A9 0002 timer9 ds 2
- 361
- 362 B5AB 0002 tick ds 2 ;1ms Tick
- 363 B5AD 0002 stick ds 2 ;1s Tick
- 364 B5AF 0002 scomp ds 2
- 365 B5B1 0001 ready ds 1
Das ist jetzt manuell von Hand berechnet, Berechnet werden muss bzw. errechnet werden muss der zweite Teil, also nach der Zeilennummerierung (so in der Datei vorhanden!) bspw. B5A9 etc.
Beispiel einer weiteren Section (selbe Datei):
Mein Code bisher:
VB.NET-Quellcode
- For Each vItem As Task In Form1.vListe
- If Not vItem.Pfad = "" Then
- Using fr As New IO.StreamReader(vItem.Pfad)
- vItem.PRN = fr.ReadToEnd
- End Using
- Dim vBegan As Boolean = False
- Dim vEnded As Boolean = False
- Dim vSkip As Integer
- Dim vSkipBool As Boolean = False
- Dim vSplit() As String = vItem.PRN.Split(CChar(vbLf))
- Dim vSkipNow As Boolean = False
- For i As Integer = 0 To vSplit.Length - 1
- If vSplit(i).Contains("section " & vItem.Name.ToLower) Then
- vBegan = True
- vSkip = i
- vSkipBool = True
- End If
- If vBegan And Not vEnded Then
- If Not vSkip = i Then
- If vSplit(i).Contains(" section") Then
- vEnded = True
- Exit For
- End If
- End If
- If vSplit(i).Length > 10 Then
- Dim vStr0 As String = vSplit(i).Substring(7, 4)
- If vSplit(i).Contains("were") Then
- vSkipNow = True
- End If
- If Not vSplit(i) = " " And vSkipNow = False And Not vSplit(i).Contains("section") Then
- Dim vLet As Boolean = False
- If vStr0.Contains(" ") Then
- vStr0 = vSplit(i).Substring(6, 4)
- vLet = True
- End If
- Try
- Dim Result As String = String.Format("{0:X}", CInt("&H" & vStr0) + CInt("&H" & vItem.Begins))
- If vLet Then
- vSplit(i) = vSplit(i).Remove(6, 4)
- vSplit(i) = vSplit(i).Insert(6, Result)
- Else
- vSplit(i) = vSplit(i).Remove(7, 4)
- vSplit(i) = vSplit(i).Insert(7, Result)
- End If
- Catch ex As Exception
- End Try
- End If
- End If
- End If
- Next
- Using fw As New IO.StreamWriter(vItem.Pfad)
- For i As Integer = 0 To vSplit.Length - 1
- vSplit(i) = vSplit(i).Replace(vbLf, "")
- fw.WriteLine(vSplit(i))
- Next
- End Using
- ' Löschen der Variablen
- End If
- Next
Das Ergebnis:
Task1_Data wird gemacht, task1_code jedoch nicht.
Hat jemand eine Idee, wie ich den Fehler beheben kann?
Sitze jetzt seit zwei Tagen daran und komme keinen Schritt weiter und bin wirklich am verzweifeln...
Vielen Dank,
Musti