Ich hab das ganze mal etwas ausgebaut.
Die ersten zwei Zeilen sind Konfiguration. Dort kann man einstellen wie viele Werte pro Zeile stehen sollen und wie man seine Einrückung am liebsten hat, also ein echtes Tab oder mehrere Leerzeichen als String.
Nach dem Start muss man die Eingangsdatei auswählen, die man konvertieren möchte.
Danach kommt ein Requester, mit dem man die Datei festlegen kann, in die alles gespeichert werden soll. Drückt man hier auf Abbrechen, wird der erstellte Code in die Zwischenablage kopiert, damit man ihn einfach in schon bestehenden Code einfügen kann.
Ich habe das ganze nicht getestet, bin mir aber sicher, dass es funktionieren wird.
Hier also der Code dafür:
Code: Alles auswählen
#VALUES_PER_LINE = 8
#TAB_CHARS = Chr(9)
Define.s input, output
input = OpenFileRequester("Datei öffnen...", "", "", 0)
If Not input
End 1
EndIf
output = SaveFileRequester("Speichern unter...", "", "", 0)
If Not ReadFile(1, input)
MessageRequester("Fehler", "Kann Datei '" + input + "' nicht lesen.")
End 1
EndIf
If output
If Not ReadFile(1, "Quell_Datei")
MessageRequester("Fehler", "Kann Datei '" + output + "' nicht zum Schreiben öffnen.")
End 1
EndIf
EndIf
Procedure.s filterChars(text.s)
Protected *c.Character = @text
Protected result.s, first.i = #True
While *c\c
If (*c\c >= '0' And *c\c <= '9' And Not first) Or *c\c = '_' Or (*c\c >= 'a' And *c\c <= 'z') Or (*c\c >= 'A' And *c\c <= 'Z')
result + Chr(*c\c)
Else
result + "_"
EndIf
*c + SizeOf(Character)
Wend
ProcedureReturn result
EndProcedure
Define.s converted
Define.i i, fEnd = Lof(1) / 4
converted + "DataSection" + #CRLF$
converted + #TAB_CHARS + filterChars(GetFilePart(input)) + ":" + #CRLF$
Define.i columns
Define.l value
For i = 1 To fEnd
value = ReadLong(1)
If columns = 0
converted + #TAB_CHARS + #TAB_CHARS + "Data.l "
EndIf
converted + "$" + RSet(Hex(value, #PB_Long), 8, "0")
columns + 1
If columns < #VALUES_PER_LINE And i < fEnd
converted + ", "
Else
converted + #CRLF$
columns = 0
EndIf
Next
fEnd = Lof(1) % 4
For i = 1 To fEnd
value = ReadAsciiCharacter(1)
If columns = 0
converted + #TAB_CHARS + #TAB_CHARS + "Data.a "
EndIf
converted + "$" + RSet(Hex(value, #PB_Ascii), 2, "0")
columns + 1
If columns < #VALUES_PER_LINE And i < fEnd
converted + ", "
Else
converted + #CRLF$
columns = 0
EndIf
Next
CloseFile(1)
converted + #TAB_CHARS + filterChars(GetFilePart(input)) + "_END:" + #CRLF$
converted + "EndDataSection" + #CRLF$
If output
WriteString(2, converted)
CloseFile(2)
Else
SetClipboardText(converted)
EndIf
End 0