In die Datenbank etwas einzufügen ist doch relativ einfach.
AutoIt Nudelt jede Zeile durch und der Käs ist gegessen.
Habe ich eben mal testweise ein Skript geschrieben was die Datenbank etwas verkleinert.
(Wegen der Dateigröße)
Ich hatte mir aber vorher mehr davon versprochen^^
Das Zip oder Rar Format holt schon viel raus ohne die Struktur zu kennen.
Da sind nur noch ca. 10% drin.^^
Einstellbar ist die Genauigkeit mit der Kommazahlen behandelt werden (wie viele Bits der Zahl zur Verfügung stehen sollen)
Bei z.B. 16 Bit sind die ersten beiden Nachkommastellen idr richtig und die dritte weicht wenn überhaupt nur sehr wenig ab.
Für Übersicht ist es Sinnvoll Größen mit Variabler Länge (z.B. Namen) immer zum Schluss an eine Zeile zu setzen.
Sämtliche Zahlen kann man durch führende Nullen auf die gleiche Länge bringen und Kommastellen (nach der 5ten ist das sowieso egal) abschneiden.
Spoiler anzeigen
Global $pInput = 'coords.txt'
Global $pOutput = 'Comp_' & $pInput
Global $iBitsFuerFloat = 4 * 4 ; Muss durch 4 Teilbar sein.
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Global $sRead = FileRead($pInput)
Global $sComp = _Comp($sRead)
FileDelete($pOutput)
FileWrite($pOutput, $sComp)
Global $sDecomp = _DeComp($sComp)
[/autoit] [autoit][/autoit] [autoit]FileDelete('Decomp_' & $pInput)
FileWrite('Decomp_' & $pInput, $sDecomp)
;~ ConsoleWrite($sComp & @CRLF)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func _DeComp($sData)
[/autoit] [autoit][/autoit] [autoit];~ Local $iBitsFuerFloat = 4*3 ; Bits für die Genauigkeit der Koords. Muss durch 4 Teilbar sein.
Local $iMaximalwert = 90 ; Maximalwert für die Koordinatenangaben. ( 90 ? )
Local $aSplit, $sRet, $sDatum
;~ $sData = StringReplace($sData, @CR, '')
$aSplit = StringSplit($sData, @LF) ; Man weiß nicht wie viele Werte hier sind...
; Aufbau
;~ 20|20|12|12|Text
For $i = 1 To $aSplit[0] - 1 Step 1
[/autoit] [autoit][/autoit] [autoit]$sDatum = $aSplit[$i]
[/autoit] [autoit][/autoit] [autoit]$sRet &= Int('0x' & StringMid($sDatum, 1, 5)) & @TAB
$sRet &= Int('0x' & StringMid($sDatum, 6, 5)) & @TAB
$sRet &= StringTrimLeft($sDatum, 10 + 2 * $iBitsFuerFloat/4) & @TAB
$sRet &= Round((Int('0x' & StringMid($sDatum, 11, $iBitsFuerFloat/4)) / 2^$iBitsFuerFloat)*$iMaximalwert, Round($iBitsFuerFloat/5,0)) & @TAB
$sRet &= Round((Int('0x' & StringMid($sDatum, 11 + $iBitsFuerFloat/4, $iBitsFuerFloat/4)) / 2^$iBitsFuerFloat)*$iMaximalwert, Round($iBitsFuerFloat/5,0)) & @TAB
$sRet &= @CRLF
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Next
[/autoit] [autoit][/autoit] [autoit]Return $sRet
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]EndFunc
[/autoit] [autoit][/autoit] [autoit]Func _Comp($sData)
[/autoit] [autoit][/autoit] [autoit]Local $aSplit, $aDatum, $sRet, $sBits
;~ Local $iBitsFuerFloat = 4*3 ; Bits für die Genauigkeit der Koords. Muss durch 4 Teilbar sein.
Local $iMaximalwert = 90 ; Maximalwert für die Koordinatenangaben. ( 90 ? )
$sData = StringReplace($sData, @CR, '')
$aSplit = StringSplit($sData, @LF) ; Man weiß nicht wie viele Werte hier sind...
For $i = 1 To $aSplit[0] -1 Step 1
$aDatum = StringSplit($aSplit[$i], @TAB, 2) ; Aufbau ist: Nr|PLZ|Ort|X|Y
; Nr ist kleiner als 2^18. -> wir nehmen (suboptimal) erstmal 2^20
; PLZ ist kleiner als 2^17 -> wir nehmen (suboptimal) 2^20
; X|Y (Maximalwert 90°) ist kleiner als 2^7 ist aber Float.
; Genutzt wird (90/255) * 2^8 Die Genauigkeit ist dann nur 0,35
; Ort hat eine variable Größe. Er kommt immer ans Ende der Zeile.
$sBits = ''
$sBits &= Hex($aDatum[0],5) ; 20Bit
$sBits &= Hex($aDatum[1],5) ; 20Bit
$sBits &= Hex(Int(Round(($aDatum[3]*2^$iBitsFuerFloat)/$iMaximalwert,0)),$iBitsFuerFloat/4) ; Genauigkeit oben einstellbar.
$sBits &= Hex(Int(Round(($aDatum[4]*2^$iBitsFuerFloat)/$iMaximalwert,0)),$iBitsFuerFloat/4)
$sRet &= $sBits & $aDatum[2] & @LF; Text
[/autoit] [autoit][/autoit] [autoit]; 2*20Bit + 2*12 Bit + Text
; = 64Bit für die Daten + Text
;~ $sRet &= @CRLF
[/autoit] [autoit][/autoit] [autoit]Next
[/autoit] [autoit][/autoit] [autoit]Return $sRet
[/autoit] [autoit][/autoit] [autoit]EndFunc
[/autoit]