Lempel-Ziv-Welch-Algorithmus

  • HI,

    Ich würde gerne einen en-/decoder mit dem Lempel-Ziv-Welch-Algorithmus schreiben. Leider habe ich keine Ahnung wie ich das ganze in Autoit umsetzetn kann.
    Meine Frage: Ist es überhaupt möglich das ganze in Autoit zu schreiben ?

    Wenn ja wäre ich sehr dankbar, wenn mir jemand einen kleinen Ansatz bieten könnte, sodass ich das ganze dann selber schreiben kann.

    • Offizieller Beitrag

    Hallo

    Möglich ist es auf jedenfall.
    Ist ja fast nur For...Next und If :P
    Mal gucken wenn ich nacher mal Zeit finde kann ich dir paar kleine Starthilfen geben ;)

    Mfg Spider

    Edit:
    Hallo

    Mal quick&Dirty, bin mir auch nicht sicher ob das richtig ist. Falls nicht sollte irgendwo ein kleiner Fehler sein, hab das VB beispiel genommen;

    Spoiler anzeigen
    [autoit]

    #include<Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $flgFirstTime = True
    Global $aDictonary[1]
    ConsoleWrite(_Compress("LZWLZ78LZ77LZCLZMWLZAP") & @CRLF)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _Compress($sUncompressed)
    Local $iDict_size = 256,$outp
    ReDim $aDictonary[$iDict_size]
    Local $w
    Local $aResult
    For $i = 0 To $iDict_size - 1
    $aDictonary[$i] = Chr($i)
    Next

    For $i = 1 To StringLen($sUncompressed)
    $c = StringMid($sUncompressed, $i, 1)
    ConsoleWrite($c & @CRLF)
    $wc = String($w + $c)
    ;~ ConsoleWrite(_GetIndexOf($wc) & @CRLF)
    ConsoleWrite( _GetIndexOf($wc) & @CRLF)
    If _GetIndexOf($wc) > -1 Then
    ConsoleWrite("-" & @CRLF)
    $w = $wc
    Else
    ConsoleWrite("!" & @CRLF)
    $scode = _Add($wc)
    $scode &= _GetIndexOf($w)
    $outp &= "," & $scode
    $w = $c
    EndIf
    Next
    Return StringTrimLeft($outp,1)

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>_Compress

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetIndexOf($iEntry)
    For $i = 0 To UBound($aDictonary) - 1
    If $aDictonary[$i] = $iEntry Then Return $i
    Next
    Return -1
    EndFunc ;==>_GetIndexOf

    [/autoit] [autoit][/autoit] [autoit]

    Func _Add($iEntry)
    If $flgFirstTime Then
    $flgFirstTime = False
    Else
    ReDim $aDictonary[UBound($aDictonary) + 1]
    EndIf
    $aDictonary[UBound($aDictonary) - 1] = $iEntry
    Return UBound($aDictonary) - 1
    EndFunc ;==>_Add

    [/autoit]