Hallooooo Community
Viele wissen vielleicht von meinem WinRar (oder so ähnlich^^) Projekt. Ich habs hinbekommen mehrere Dateien in 1 zu speichern, jedoch änderte sich nichts an der Größe.
Das kann man aber mit diesen 2 Funktionen ändern
Ich hab noch nicht viel Ahnung von Functionen schreiben, also gebt mir bitte noch ein paar Tipps, vor allem im Thema "SetError".
Aber vielleicht kann ja jemand was mit anfangen
Spoiler anzeigen
Func _Pack_String($sString)
Local $aOneWord[1], $zaehler = 0, $aSame[1], $sEndString = "", $All = ""
If $sString = "" Then
SetError(1)
Return "2| | |"
EndIf
If $sString <> "" Then
$words = StringSplit($sString, " ", 1)
If IsArray($words) Then
Local $aSame[$words[0] + 5][2]
For $i = 1 To $words[0]
If _ArraySearch($aOneWord, $words[$i] ) = -1 Then
_ArrayAdd($aOneWord, $words[$i] )
If $aSame[$i - 1][1] = "" Then
$aSame[$i - 1][1] = $zaehler + 1
$aSame[$i - 1][0] = $words[$i]
EndIf
If $aSame[$i - 1][1] <> "" Then
$aSame[$i][1] = $zaehler + 1
$aSame[$i][0] = $words[$i]
EndIf
$zaehler = $zaehler + 1
EndIf
If _ArraySearch($aOneWord, $words[$i] ) <> -1 Then
$sEndString = $sEndString & $aSame[_ArraySearch($aSame, $words[$i] )][1] & "|"
EndIf
Next
EndIf
EndIf
For $i = 1 To UBound($aOneWord) - 1
If $aOneWord[$i] <> "" Then $All = $All & $aOneWord[$i] & "|"
Next
$All = $All & $sEndString
$end = UBound($aOneWord) & "|" & $All
Return $end
EndFunc ;==>_Pack_String
Spoiler anzeigen
Func _DePack_String($sPackedString)
Local $alle = "", $dick = 0
If $sPackedString = "" Then
SetError(1)
Return -1
EndIf
$data = StringSplit($sPackedString, "|")
If IsArray($data) Then
Local $aTable[$data[0]]
Local $aTables[$data[0] + 5]
For $i = 2 To $data[1]
$aTables[$i] = $data[$i]
$aTable[$i] = $i - 1
Next
For $i = $data[1] To $data[0]
$dick = _ArraySearch($aTable, $data[$i])
If $dick <> -1 Then $alle = $alle & $aTables[$dick] & " "
Next
EndIf
Return $alle
EndFunc ;==>_DePack_String
Wichtig: _PackString gibt einen String zurück der am Anfang immer alle Vorkommenden Wörter 1mal beinhaltet. Diese werden danach immer als Zahl geschrieben.
Beispiel:
Spoiler anzeigen
$s = InputBox("Angabe", "Gib einen String an (Mehrere Wörter, die doppelt vorkommen")
$test = _Pack_String($s)
MsgBox(0, "", $test) ; hier sieht man wie der gepackte String aussieht
$test2 = _DePack_String($test)
MsgBox(0, "", $test2) ; hier ist der String wieder normal
Mein fertiges Projekt erscheint innerhalb der nächsten Woche
PS: weis jemand wie ich eine ausgelesene Binary bei _PackString splitten soll??? ich hab keine brauchbare Idee