1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Oscar

Beiträge von Oscar

  • UDFs vom deutschen Forum in das engl. Wiki aufnehmen

    • Oscar
    • 7. Januar 2021 um 11:09
    Zitat von Musashi

    im EN-Forum @Gorathan

    Ja, das bin ich! :)

  • Frohes Weihnachtsfest

    • Oscar
    • 23. Dezember 2020 um 16:08
    Zitat von UEZ

    Auch von mir schöne Weihnachten.

    Geil! :):thumbup:

  • Frohes Weihnachtsfest

    • Oscar
    • 20. Dezember 2020 um 16:54
    Zitat von bazii

    Ist die Corona ein weibliches Wesen

    oder ist SIE wenn es Corona nicht mehr gibt etwa eine Sache also ein ES gewesen?

    Die Krankheit/Pandemie.

  • Frohes Weihnachtsfest

    • Oscar
    • 20. Dezember 2020 um 09:59

    In diesem Jahr ist so vieles anders, deshalb versuche ich mich mal als Dichter:

    Denkt euch, ich habe "Corona" geseh'n

    sie kam aus dem Osten und blieb dort nicht steh'n.

    Sie fegte hinüber zum Tannenwald

    und machte auf ihrem Weg auch dort nicht halt.

    Sie brachte Krankheit, Tod und Isolation

    über unsere gesamte Nation.

    Arbeit, Freizeit und Urlaub in diesem Jahr

    nichts ist, wie es früher mal war.

    Wir halten nun Abstand und hamstern was geht

    mit Klorolle und Maske, die Welt sich doch dreht.

    Das Weihnachtsfest bescheiden und klein

    bei gutem Essen und einem Glas Wein.

    Sylvester wird's wohl auch nicht so bunt

    was soll's, Hauptsache wir bleiben alle gesund.

    Mit diesen Worten wünsche ich euch ein frohes Weihnachtsfest

    und kommt gesund ins neue Jahr.

    Oscar


    Zusatzstrophe für alle Quernörgler:

    Manch einer denkt quer und

    verleugnet sie.

    Demonstriert ohne Abstand und Maske

    gegen sie.

    Doch dann kommt sie und holt ihn

    die Pandemie.

  • Stringmanipulation in einer Funktion

    • Oscar
    • 27. November 2020 um 08:41
    Zitat von Thorkfumble

    Eine Frage hätte ich schon, ich lese ja den string in eine Variable ($ABCinfo) ein, in euren Beispielen deklariert ihr den Wert aber statisch (der String im json File kann dauernd ändern, nur das Format bleibt beständig).

    Der String darf auch eine Variable sein:

    AutoIt
    Global $ABCinfo = '{"version":"0.170.14.7","oldVersion":"0.170.13.804"}'
    
    Global $aMatch = StringRegExp($ABCinfo, '.*:"(.+)",.*', 3)
    If Not @error Then MsgBox(0, "", $aMatch[0] & @CRLF)
  • Splashscreen mit animiertem Gif

    • Oscar
    • 18. November 2020 um 16:39
    Zitat von hipfzwirgel

    @ Oscar: deine Variante konnte ich leider nicht benutzen, da mir die ganzen WinApi...au3 Includes fehlen

    Gibt es denn einen Grund, warum Du nicht die aktuelle AutoIt-Version (v3.3.14.5) benutzen willst?

  • Splashscreen mit animiertem Gif

    • Oscar
    • 17. November 2020 um 13:49

    Ich habe Dir mal schnell ein Beispiel geschrieben:

    AutoIt
    #include <Array.au3>
    #include <Date.au3>
    #include <GDIPlus.au3>
    #include <GDIPlusConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <Timers.au3>
    #include <WinAPIGdiDC.au3>
    #include <WinAPIGdiInternals.au3>
    #include <WinAPIHObj.au3>
    #include <WinAPISysWin.au3>
    #include <WindowsConstants.au3>
    
    
    Opt('GUIOnEventMode', 1)
    
    _GDIPlus_Startup()
    
    Global Const $GDIP_PROPERTYTAGFRAMEDELAY = 0x5100, $iTransColor = 0x00FF00
    Global $iFrameIndex = 0
    OnAutoItExitRegister('_AutoItExit')
    Global $sGifFile = _Loading()
    Global $hGifImage = _GDIPlus_BitmapCreateFromMemory($sGifFile)
    Global $iW = _GDIPlus_ImageGetWidth($hGifImage)
    Global $iH = _GDIPlus_ImageGetHeight($hGifImage)
    $aFrameDelay = _GDIPlus_ImageGetPropertyItem($hGifImage, $GDIP_PROPERTYTAGFRAMEDELAY) ; Array mit den Frame-Delays (in 10tel Millisekunden)
    If @error Then Exit
    _ArrayDelete($aFrameDelay, 0) ; Counter in [0] entfernen
    ;~ _ArrayDisplay($aFrameDelay, 'FrameDelays')
    
    ; Das Hauptfenster
    Global $hMainGui = GUICreate('Hauptfenster', 800, 600, -1, -1)
    GUISetBkColor(0xEEEEEE, $hMainGui)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseMainGui')
    Global $idText = GUICtrlCreateEdit('', 10, 100, 780, 400)
    
    ; Das "Loading-Fenster" als transparentes Popup
    Global $hAnimGui = GUICreate('Anim-Popup', $iW, $iH, 350, 10, $WS_POPUP, BitOR($WS_EX_MDICHILD, $WS_EX_LAYERED), $hMainGui)
    GUISetBkColor($iTransColor, $hAnimGui)
    _WinAPI_SetLayeredWindowAttributes($hAnimGui, $iTransColor)
    
    Global $hDC = _WinAPI_GetDC($hAnimGui)
    Global $hHBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $iW, $iH)
    Global $hDC_Backbuffer = _WinAPI_CreateCompatibleDC($hDC)
    Global $oDC = _WinAPI_SelectObject($hDC_Backbuffer, $hHBitmap)
    Global $hGfxCtxt = _GDIPlus_GraphicsCreateFromHDC($hDC_Backbuffer)
    _GDIPlus_GraphicsSetSmoothingMode($hGfxCtxt, $GDIP_SMOOTHINGMODE_HIGHQUALITY)
    _GDIPlus_GraphicsSetPixelOffsetMode($hGfxCtxt, $GDIP_PIXELOFFSETMODE_HIGHQUALITY)
    
    _Timer_SetTimer($hMainGui, $aFrameDelay[$iFrameIndex] * 10, '_Draw_Timer')
    GUISetState(@SW_SHOW, $hAnimGui)
    GUISetState(@SW_SHOW, $hMainGui)
    
    ; In dieser Schleife kannst Du Deine Laderoutine schreiben
    For $i = 0 To 30
        GUICtrlSetData($idText, 'bla bla bla ' & $i & @CRLF, 1)
        Sleep(250)
    Next
    GUISetState(@SW_HIDE, $hAnimGui) ; wenn fertig geladen, die Animation verstecken
    
    ; Und die Endlosschleife fuer das Hauptfenster
    While Sleep(1000)
    WEnd
    
    Func _CloseMainGui()
        GUIDelete($hMainGui)
        Exit
    EndFunc
    
    Func _Draw_Timer($hWnd, $Msg, $iIDTimer, $dwTime)
        If $iFrameIndex >= UBound($aFrameDelay) Then $iFrameIndex = 0
        _Timer_SetTimer($hWnd, $aFrameDelay[$iFrameIndex] * 10, '_Draw_Timer', $iIDTimer)
        _Draw_Image()
        $iFrameIndex += 1
    EndFunc   ;==>_Draw_Timer
    
    Func _Draw_Image()
        _GDIPlus_ImageSelectActiveFrame($hGifImage, $GDIP_FRAMEDIMENSION_TIME, $iFrameIndex)
        _GDIPlus_GraphicsClear($hGfxCtxt, BitOR(0xFF000000, $iTransColor))
        _GDIPlus_GraphicsDrawImage($hGfxCtxt, $hGifImage, 0, 0)
        _WinAPI_BitBlt($hDC, 0, 0, $iW, $iH, $hDC_Backbuffer, 0, 0, $SRCCOPY)
    EndFunc   ;==>_Draw_Image
    
    Func _AutoItExit()
        _Timer_KillAllTimers($hMainGui)
        _WinAPI_SelectObject($hDC_Backbuffer, $oDC)
        _GDIPlus_GraphicsDispose($hGfxCtxt)
        _WinAPI_DeleteObject($hHBitmap)
        _WinAPI_ReleaseDC($hAnimGui, $hDC)
        _GDIPlus_ImageDispose($hGifImage)
        GUIDelete($hAnimGui)
        _GDIPlus_Shutdown()
        Exit
    EndFunc
    
    
    ;Code below was generated by: 'File to Base64 String' Code Generator v1.20 Build 2020-06-05
    
    Func _Loading($bSaveBinary = False, $sSavePath = @ScriptDir)
        Local $Loading
        $Loading &= 'R0lGODlhaQBGAMMAAO7u7szMzKqqqnd3d4iIiJmZmbu7u93d3WZmZgAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFCgAJACwAAAAAaQBGAAAE/zDJSau9OOvNu/9gKI5kaZ5oqm5A4AYAsM40KwwEUQjGEdfAoABBHOAKgUNwOQMMiFDETsmsng5PKNLKPTmhBFl3TMpKyWjRkChIuz0A7Xu+GRrF9HzFOGjr/xJORlSAegZ8hYCHOl6JKTd9Jj+OJwI5BZKTlCSLfiQxeJsiATkEmaGiIAClhCKgqSSlBp8APrAjBjoFqB4HPry3HKsFBbMhtb7BuMTFqr62ymrMxsJJydGuzDwcBy7X2K4COwICMBa1L0ngJQAG4+QG6QbzL63rIwHkPDzz/S/A90YZ4NePnr2AXnx5A4iwocOHECNKnEixosWLGDNq3MgRDkMrr/8CaZoDgNhHJsQCTEipp+SuNywlxKTj8uSSmSNJmoS5xVFNYQUxtAh6LsA8JTNdiOmm5EA/XkN7JFAqaacGd8xmSsCatUCrA12xqpTZ0928rl+7iuv5ySoGrPG4EgpALF4+ZhNclqPLbGyCmFzj4g1EbG9WvyN+YgDrNe/gv2wTYBUjjppLtoCJEZosobJjrdlevt1RgfFSxFN3ukyLuSwxCqYTrIYN+phbC7VBxzC6VgZj3K3HmqXw83eF2qpuH49M1i/fri/5AvebmZrsndKXo7Yt+kJu19PORn+tfaVr6z+zU0D+QbH3ZsQ1X0eCh69v5TOrx38Z+/P25N1ZgFWmBdmpt5VqWjFG3Xn7iVEXBXz9155ytJFGGHx8zcWMGFhRAcBaCwoH34UcxsRYZCOFJNJn0GVW11qiXcZDV2PJyFVwB6Jn1WXQOUdec5+JwWOPEzxXVygnPvigBEnukh+DQebFlQAu+YiJeX65B8qWKgbyzwUtUCVbTt3UGIomXY55ziTyiXQmKjk1'
        $Loading &= 'VBKVDXYkVGFCiuOJnQK2GCCfBIZlE59pAspFBAAh+QQFCgAJACwkAAMAGwAeAAAErDDJSaUxhdxTu09IKCKDBnzfOJZFgCZEMlBETYhDYbjdOcwDAacCKOQMhyHtl3slAAGAtEJgCpwvQ1WDfW27WRsYZTOMP7bTuRIgZNadduEKrxR0dQoGn5cE7mZ9CQd3BYIShWp9AnM8fQECkXlTCZF0cJSQkY5gUooGAhtjnooJoBecHwAHnh0Xr0pESaylFa8Xg7MBs0m1FQevCQHDxLxgBwE7xMO9mKusLxEAIfkEBQoACQAsJAAEAB0AHQAABKYwyTkNGRhLNAT9oDFc2ZCYCaJ64FcQV1zMBapyQCu9MGG0B8EN1+IRWDoJ4TbIUV6vX/KpGrlm0yLHN6FJs58loSAJ0MAtAKJgOCQEWHTLEDi4C3B5EgAIvvVZAgJfgCGChUkBh4hAg4w6g4SPEgaVkx+VkpMHmZcUmQGeEpyVbqIBP6GiCQGhdautsVN8aLGtdgl8urpyALF2wH27gH3AdsOXtGARACH5BAUKAAkALCQAAwAeAB0AAAStMMlJZUhCpFu7nwUhjgORGN8XFGw4EuUgp5XQtlkGwzON3QmAxzAb0DIslK9glBw6Bo2A48MYEc1JIEetYhIIhGaS83YKYIRQEh2bK2H0SWDovjHhpmF/rxzCCE97Sn0TgAYHe3Z9BGF1ioUUjQMakJESOygoi3c2AgcAdZcUBwFCAaijE08bqKyqWqmwsQGvsACoprNOB71rs72+uwnBwsCgoADKs8rNy8zObxEAIfkEBQoACQAsJAADAB4AGgAABKswyUnlCcaEBKr/UiCMRWkWYJqMpHCWBGGoU8aOWVYmRYyqNoNgA4oZU7kZbRUbEDoVTGZZaxIqh9yBWnMOlJIckSsRDM6TLYZcOQ8Eoc2WTUHHx3SJHRDo5+sTfAFzfzxpfYR/KAgFF4OFEgUIjAAHlpAJBJMzlol5kwicl4UB'
        $Loading &= 'oB2dUHkCkwMSlaN0AKBwrgcAqWSSZ7i3uFxOMhW9vksHAmAUw3QBxK69kBEAIfkEBQoACQAsJAADAB4AHQAABKwwyUnnCeGcyrs1ICgYQhl43hGuZFkWJzqdwYolgZsUhSDjN8OGA8jxeCgMZigzHAudy/JHeVaKN2oFSqhoMlpOgdCVADTM8IRMMEjQAHXFwH5r5BzyII7GVwgDBCdncX4TAgMDCQCMhYYSgAKNjo+JZoyPEgWWi5iZiYqdlHgHnJeZCaFXlageCAitEgKvCD6ts6+qjwAEtLqGuLlphoADCHuxTm2xCSoBoxMRACH5BAUKAAkALCUAAwAdAB4AAASoMMlJEwDn2Mq7xEEYGIlheh52iEEymrCGSlkm2iUMz/UKoCaBgNRRyWYSg1DAuWR+SElgSZw4oVGpsND6XLDZZEJQsF7CHCbXckZzCnCv+x3/gecJeBnfMcC7fBQkBFWBEmQETIYTAgQEgIuOj4sTkkeGBgQDBJQSmpydCZsDnQYDp4WBp5uUBauLXaQfbpIECLe3eAemuL0IimErjQO9A8BzwkMGdxwRACH5BAUKAAkALCgAAwAaAB4AAASeMMlJgaU4V3B6D+ChZRbnfSA4TqV1uEcqj+0aB4ZBX6sUJDkdBtDDHILF5DEnSq5wOWcPKR3hBMLqUMDVariCppfSHWPKZokOm1YXCm3JuyAeA+bE9jw+z44FcARxBIQTH3BOBoQEiAlXAwR5KwKLghSKAwgIdBlHkJCWGAWZmpoJcwOpBKorBqSlEgMJqal+GnevCBOytkVLbxJ1GhEAIfkEBQoACQAsJQAEAB0AHQAABJ8wyUkluPjWzWe+Rwh0ZDKaYKiWrKeGbRwGwRG3AE3frc6zB9+PtLMNOTZD4NgxOJkcpwG6CTiNVIlVmZ1sa1jqVZo1CKYCASE8TAsSBcKgAA2kp4HBAAF1LxN7CARHZgVvEgYIinQ/AoZ/EoEIhzEFlpQSB5IxBpaWHYGA'
        $Loading &= 'mB5wnoygfIB6hglqBIMEnywCqXp6sK+vR7YDcrldrQmQJBEAIfkEBQoACQAsJAAFAB4AHAAABK0wyUmrBTbrCzreIOeF5OR1ZQocaBquB0sFh1vBtXQYgV3FsoRBYMj5EjhJoUAwHgPQRIAwGBxnUIChSrhODtnCANH1JsC0AoJsPkN367IXjDSsEW1h73BvG/4SYwgCc4ASAmtmf0UTeAkFT4sUhAkDlCkBi06BVS4BRIYUGFUDkCQCqAYgXEIan6hEIVQDBLUERERLS6klW7a2ursFPS4GvwTBAsRHAFCEPR8bEQAh+QQFCgAJACwkAAUAHgAcAAAEqTDJmU44NOtNjQlcGBaFAIroRKyFkabEILuvKCB4UVOAhiOEHQ/Qk9xwwmExMcgllZLf6Zkg9gw/6uRAjCK0E8ABk/jqwGJuMHHWpouDtnYsGTDBlXFPNlg+AxcTM2CAZEwDa3+AS4gDAk8WgB2IBDQ1GJIZKyuWKAcfCVMUmwSPKAEeoBybJCKpnRwkBCQkLrYCrzu0JAK9vQa4BoY1tAIlvrBJGB50KBEAOw=='
        Local $bString = _WinAPI_Base64Decode($Loading)
        If @error Then Return SetError(1, 0, 0)
        $bString = Binary($bString)
        If $bSaveBinary Then
            Local Const $hFile = FileOpen($sSavePath & "\loading.gif", 18)
            If @error Then Return SetError(2, 0, $bString)
            FileWrite($hFile, $bString)
            FileClose($hFile)
        EndIf
        Return $bString
    EndFunc   ;==>_Loading
    
    Func _WinAPI_Base64Decode($sB64String)
        Local $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "ptr", 0, "dword*", 0, "ptr", 0, "ptr", 0)
        If @error Or Not $aCrypt[0] Then Return SetError(1, 0, "")
        Local $bBuffer = DllStructCreate("byte[" & $aCrypt[5] & "]")
        $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "struct*", $bBuffer, "dword*", $aCrypt[5], "ptr", 0, "ptr", 0)
        If @error Or Not $aCrypt[0] Then Return SetError(2, 0, "")
        Return DllStructGetData($bBuffer, 1)
    EndFunc   ;==>_WinAPI_Base64Decode
    Alles anzeigen
  • Serielle Kommunikation mit Arduino-Board über USB-Port unter Win 10

    • Oscar
    • 14. November 2020 um 10:13
    Zitat von solor2412

    Hat hier jetzt jemand eine Lösung, so das man auch unter Win 10 von Autoit aus mit einem Arduino-Board kommunizieren kann??

    Meine Serial-UDF funktioniert auch unter Windows 10 (gerade getestet).

  • Bildschirm Auflösung auf Knopfdruck ändern

    • Oscar
    • 12. November 2020 um 05:21
    Zitat von Bitnugger

    Ich habe dein Tool heute bei mir gestartet und die Auflösung geändert... das funktioniert, aber danach öffnet dein Tool nicht mehr das Kontextmenü, bzw. nur ganz kurz und dann ist es wieder weg.

    Hmm...das kann ich bei mir nicht nachvollziehen...

    Bei mir klappt das umschalten einwandfrei, auch mit zwei Monitoren (Windows 10, 64 Bit, NVidia GTX 1050 Ti).

  • Bildschirm Auflösung auf Knopfdruck ändern

    • Oscar
    • 10. November 2020 um 17:25
    Zitat von Code4Fun

    Wenn ja, bitte ein Stichwort liefern.

    ChangeDisplayResolution

  • Warum funktioniert GetPixelColor nicht???

    • Oscar
    • 9. November 2020 um 05:04
    Zitat von dask

    Ich verstehe nicht warum das nicht funktioniert........

    Das funktioniert nicht, weil Du unsere Forenregeln nicht gelesen hast bzw. diese ignorierst!

  • Auflösung und Positionen von mehreren Bildschirmen verwalten

    • Oscar
    • 16. Oktober 2020 um 17:34
    Zitat von BugFix

    Windows stellt keine Möglichkeit bereit, die Bildschirmauflösung per Kommandozeile zu ändern.

    Auflösung ändern geht: ChangeDisplayResolution

  • Fuzzy-Search

    • Oscar
    • 6. Oktober 2020 um 17:57
    Zitat von Bitnugger

    Das solltest du in deinem ersten Post und auch in dem Nim-Script vermerken.

    Ich hab's mal oben eingefügt. Danke!

    Zitat von Bitnugger

    Passend zu diesem Thema ist evtl. auch dies hier: https://de.wikipedia.org/wiki/Hamming-Abstand

    Nicht ganz!

    Die Levenshtein-Distanz unterscheidet sich etwas vom Hamming-Abstand.

    Siehe hier: https://de.wikipedia.org/wiki/Levenshtein-Distanz

    Zitat


    Die Levenshtein-Distanz kann als Erweiterung des Hamming-Abstands angesehen werden, welcher sich auf Ersetzungen beschränkt und daher nur Zeichenketten gleicher Länge bemessen kann.

  • Fuzzy-Search

    • Oscar
    • 6. Oktober 2020 um 17:02

    Nochmal eine neue Version, weil ich bemerkte, dass die Nim-interne Funktion zum berechnen der Levenshtein-Distanz doch deutlich effektiver arbeitet.

    Diesen deutlichen Geschwindigkeitsvorteil wollte ich euch nicht vorenthalten. Siehe Post#1.

  • Kontextmenü nur wenn Checkbox angehakt ist

    • Oscar
    • 4. Oktober 2020 um 10:50
    Zitat von Tweaky

    Logisch

    Naja, so ganz logisch finde ich das nicht.

    Warum darf man das Contextmenü nicht löschen und wieder neu erstellen?

    Es ist zwar für Dich jetzt eine Lösung des Problems, aber das "warum" ist immer noch offen.

  • Validierung über JavaScript

    • Oscar
    • 4. Oktober 2020 um 09:59
    Zitat von Alina

    Das waren doch Auszüge vom JavaScript.

    Ja, das man bei einer *.au3 nur 50% der Zeilen braucht war von aus zu gehen.

    Das funktioniert aber auch mit JavaScript:

    Code
            val = '98765';
            value = '0000000000' + val
            value = value.slice(-10)
    
            value = 'xxxxxxxxxx' + val
            value = value.slice(-10)
  • Validierung über JavaScript

    • Oscar
    • 3. Oktober 2020 um 19:25
    Zitat von Alina

    Warum? :/ Weil ich die Lösung benötige.

    Das geht doch viel einfacher:

    AutoIt
    $iValue = 99999
    $sValue1 = StringRight('0000000000' & $iValue, 10)
    $sValue2 = StringRight('xxxxxxxxxx' & $iValue, 10)
    ConsoleWrite('$sValue1 = ' & $sValue1 & @CRLF)
    ConsoleWrite('$sValue2 = ' & $sValue2 & @CRLF)
  • Kontextmenü nur wenn Checkbox angehakt ist

    • Oscar
    • 3. Oktober 2020 um 16:53

    Lass das Contextmenü bestehen und lösche nur die MenuItem(s):

    AutoIt
    #include <GUIConstantsEx.au3>
    
    Global $idMenuitem
    
    Opt('GUIOnEventMode', 1)
    
    Global $GUI = GUICreate("hallo", 360, 340)
    Global $idCheckbox = GUICtrlCreateCheckbox("Test", 70, 75)
    Global $idContext = GUICtrlCreateContextMenu()
    
    GUISetState()
    GUISetOnEvent($GUI_EVENT_CLOSE, "_beenden")
    GUICtrlSetOnEvent($idCheckbox, "_checkbox_Status")
    
    While 1
        Sleep(10)
    WEnd
    
    Func _checkbox_Status()
        If BitAND(GUICtrlRead($idCheckbox), $GUI_CHECKED) Then
            $idMenuitem = GUICtrlCreateMenuItem("angehakt", $idContext)
        Else
            GUICtrlDelete($idMenuitem)
        EndIf
    EndFunc   ;==>_checkbox_Status
    
    Func _beenden()
        Exit
    EndFunc   ;==>_beenden
    Alles anzeigen
  • Fuzzy-Search

    • Oscar
    • 3. Oktober 2020 um 10:15

    Ich habe den Code noch etwas abgeändert, damit es bei sehr vielen Fundstellen nicht zu unnötigen Verzögerungen kommt (viele Dll-Calls).

    Neue Version in Post#1.

  • Fuzzy-Search

    • Oscar
    • 2. Oktober 2020 um 19:44
    Zitat von Oscar

    Müsste man mal mit purem AutoIt vergleichen...

    Aus Neugier habe ich das mal getan:

    AutoIt: 120976 ms

    AutoIt mit Nim-Dll: 238 ms

    Zeitfaktor: mehr als das 500fache bei purem AutoIt.

    AutoIt mit Nim-Dll, wie oben, nur mit "Richtlinie" als Suchwort:

    Testscript (AutoIt) hier:

    AutoIt
    $sWord1 = FileRead(@ScriptDir & '\bgb.txt')
    $iTimer = TimerInit()
    $aWords = StringRegExp($sWord1, '(\S+)', 3)
    ConsoleWrite('Timer StringRegExp: ' & TimerDiff($iTimer) & @CRLF)
    $sWord2 = 'Richtlinie' ; das Suchwort
    $sFound = ''
    $iPos = 0
    $iTimer = TimerInit()
    For $word In $aWords
        If CompTstr($word, $sWord2) > 0.66 Then $sFound &= $iPos & ','
        $iPos += 1
    Next
    ConsoleWrite('Timer For-Loop: ' & TimerDiff($iTimer) & @CRLF)
    
    Func min3($a, $b, $c)
        Local $dummy
        $dummy = $a
        If $b < $dummy Then $dummy = $b
        If $c < $dummy Then $dummy = $c
        Return $dummy
    EndFunc   ;==>min3
    
    Func LevenshteinDistance($s, $t)
        Local $n, $m
        $n = StringLen($s)
        $m = StringLen($t)
        If $s = $t Then Return 0
        If $s = "" Then Return $m
        If $t = "" Then Return $n
        Local $d[$n + 1][$m + 1], $i, $j, $cost
        For $i = 0 To $n
            $d[$i][0] = $i
        Next
        For $j = 0 To $m
            $d[0][$j] = $j
        Next
        For $i = 1 To $n
            For $j = 1 To $m
                If StringMid($s, $i, 1) = StringMid($t, $j, 1) Then
                    $cost = 0
                Else
                    $cost = 1
                EndIf
                $d[$i][$j] = min3($d[$i - 1][$j] + 1, $d[$i][$j - 1] + 1, $d[$i - 1][$j - 1] + $cost)
            Next
        Next
        Return $d[$n][$m]
    EndFunc   ;==>LevenshteinDistance
    
    Func CompTstr($s, $t)
        Local $n, $m
        $n = StringLen($s)
        $m = StringLen($t)
        If $n < $m Then $n = $m
        Return ($n - LevenshteinDistance($s, $t)) / $n
    EndFunc   ;==>CompTstr
    Alles anzeigen

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™