campweb | Oflline Deutsch<>English Übersetzter | Mit versch. Ü-Möglichkeiten

  • Es war eine mühsame Arbeot, die Wörterdatenbank aus alles möglichen Büchern und Websiten abzuschreiben ( :wacko: ), und hier ist er, mein Offlineübersetzter mit 130 000 Schlagwörtern. Noch ist er sehr langsam. Im Anhang ist das Skript und die Datenbank, bitte, die Datenbank kann von jedem verwendet werden, aber bitte meinen Namen mit in die Credits schreiben.

    //EDIT: Nicht mehr langsam, jetzt statt 148s nur noch 0,029s, dank autoBert
    //EDIT: Kein fehler mehr bei "Deutsch..." oder "English..." Eingabe dank mir
    //EDIT: Mehrere Ergebnisse dank chip
    //EDIT: Kein Kommafehler mehr dank autoAbert
    //EDIT: Jetzt "Nicht gefunden Meldung" statt Error dank mir
    //EDIT: Kürzerer Code dank allen

    Skript:

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    #include <Array.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    $datei = @ScriptDir & "\dic.dic"
    Global $aSearch[1]
    _FileReadToArray($datei,$aSearch)

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

    #Region ### START Koda GUI section ### Form=
    $Translato = GUICreate("Translator by campweb | DE<>BE/AE", 322, 291, 391, 158)
    $Label1 = GUICtrlCreateLabel("Von Deutsch zu Englisch:", 8, 8, 126, 17)
    $deutsch = GUICtrlCreateInput("Deutsch...", 8, 32, 305, 21)
    $Input2 = GUICtrlCreateInput("Englisch...", 8, 56, 305, 21, BitOR($ES_AUTOHSCROLL,$ES_READONLY))
    $Button1 = GUICtrlCreateButton("Übersetzen", 8, 80, 305, 25, 0)
    $Label2 = GUICtrlCreateLabel("From English to German:", 8, 112, 119, 17)
    $engl = GUICtrlCreateInput("English...", 8, 136, 305, 21)
    $Input4 = GUICtrlCreateInput("Deutsch...", 8, 160, 305, 21, BitOR($ES_AUTOHSCROLL,$ES_READONLY))
    $Button2 = GUICtrlCreateButton("Translate", 8, 184, 305, 25, 0)
    $Edit1 = GUICtrlCreateEdit("", 8, 216, 305, 65)
    GUICtrlSetData(-1, "Edit1")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    GUICtrlSetData($Edit1, "Initialisiere...")
    Sleep(1000)
    If GUICtrlRead($deutsch) = "Deutsch..." Then
    GUICtrlSetData($Edit1, "Fehler...")
    Sleep(1000)
    GUICtrlSetData($Edit1, "Erneut versuchen!")
    Else
    GUICtrlSetData($Edit1, 'Beginne Suche nach: "'&GUICtrlRead($deutsch)&'" Bitte warten...')
    $time = TimerInit()
    $suche = GUICtrlRead($deutsch)
    $aRes = _ArrayFindAll($aSearch,$suche)
    $sFound = ""
    $j = UBound($aRes)
    if IsArray($aRes) Then
    for $i = 0 to $j-1
    if $aRes[$i] > 0 and $aRes[$i] < $aSearch[0]-1 Then
    $sFound &= $aSearch[$aRes[$i]-1]
    if $i <> $j-1 Then $sFound &= ", "
    EndIf
    Next
    EndIf
    EndIf
    GUICtrlSetData($Input2,$sFound)
    If GUICtrlRead($Input2) = "" Then
    GUICtrlSetData($Edit1, "Nicht gefunden!")
    Sleep(2000)
    GUICtrlSetData($Edit1, "Erneut versuchen!")
    Else
    GUICtrlSetData($Edit1, 'Suche nach "'&GUICtrlRead($deutsch)&'" erfolgreich! Zeit: '&Round(TimerDiff($time)/1000, 3)&"s")
    EndIf
    Case $Button2
    GUICtrlSetData($Edit1, "Initialisiere...")
    Sleep(1000)
    If GUICtrlRead($engl) = "English..." Then
    GUICtrlSetData($Edit1, "Fehler...")
    Sleep(1000)
    GUICtrlSetData($Edit1, "Erneut versuchen!")
    Else
    GUICtrlSetData($Edit1, 'Beginne Suche nach: "'&GUICtrlRead($engl)&'" Bitte warten...')
    $time = TimerInit()
    $suche = GUICtrlRead($engl)
    $aRes = _ArrayFindAll($aSearch,$suche)
    $sFound = ""
    $j = UBound($aRes)
    if $j > -1 Then
    for $i = 0 to UBound($aRes) -1
    if $aRes[$i] > 0 and $aRes[$i] < $aSearch[0] Then
    $sFound &= $aSearch[$aRes[$i]+1]
    if $i <> $j-1 Then $sFound &= ", "
    EndIf
    Next
    EndIf
    EndIf
    GUICtrlSetData($Input4,$sFound)
    If GUICtrlRead($Input4) = "" Then
    GUICtrlSetData($Edit1, "Nicht gefunden!")
    Sleep(2000)
    GUICtrlSetData($Edit1, "Erneut versuchen!")
    Else
    GUICtrlSetData($Edit1, 'Suche nach "'&GUICtrlRead($engl)&'" erfolgreich! Zeit: '&Round(TimerDiff($time)/1000, 3)&"s")
    EndIf

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

    EndSwitch
    WEnd

    [/autoit]

    berichtigte Version:

    Datenbank im Anhang!

  • Noch ist er sehr langsam.


    Das lässt sich leicht beheben, einfach auf Array umstellen:

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    #include <Array.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    $datei = @ScriptDir & "\dic.dic"
    Global $aSearch[1]
    _FileReadToArray($datei,$aSearch)

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

    #Region ### START Koda GUI section ### Form=
    $Translato = GUICreate("Translator by campweb | DE<>BE/AE", 322, 291, 391, 158)
    $Label1 = GUICtrlCreateLabel("Von Deutsch zu Englisch:", 8, 8, 126, 17)
    $deutsch = GUICtrlCreateInput("Deutsch...", 8, 32, 305, 21)
    $Input2 = GUICtrlCreateInput("Englisch...", 8, 56, 305, 21, BitOR($ES_AUTOHSCROLL,$ES_READONLY))
    $Button1 = GUICtrlCreateButton("Übersetzen", 8, 80, 305, 25, 0)
    $Label2 = GUICtrlCreateLabel("From English to German:", 8, 112, 119, 17)
    $engl = GUICtrlCreateInput("English...", 8, 136, 305, 21)
    $Input4 = GUICtrlCreateInput("Deutsch...", 8, 160, 305, 21, BitOR($ES_AUTOHSCROLL,$ES_READONLY))
    $Button2 = GUICtrlCreateButton("Translate", 8, 184, 305, 25, 0)
    $Edit1 = GUICtrlCreateEdit("", 8, 216, 305, 65)
    GUICtrlSetData(-1, "Edit1")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    GUICtrlSetData($Edit1, "Initialisiere...")
    Sleep(1000)
    GUICtrlSetData($Edit1, 'Beginne Suche nach: "'&GUICtrlRead($deutsch)&'" Bitte warten...')
    $time = TimerInit()
    $suche = GUICtrlRead($deutsch)
    $iRes = _ArraySearch($aSearch,$suche)
    GUICtrlSetData($Input2, "" & $aSearch[$iRes-1])
    #cs
    For $i = 1 To _FileCountLines($datei)
    If FileReadLine($datei, $i) = $suche Then
    ExitLoop
    EndIf
    Next
    GUICtrlSetData($Input2, ""&FileReadLine($datei, $i-1))
    #ce
    GUICtrlSetData($Edit1, 'Suche nach "'&GUICtrlRead($deutsch)&'" erfolgreich! Zeit: '&Round(TimerDiff($time)/1000, 3)&"s")
    Case $Button2
    GUICtrlSetData($Edit1, "Initialisiere...")
    Sleep(1000)
    GUICtrlSetData($Edit1, 'Beginne Suche nach: "'&GUICtrlRead($engl)&'" Bitte warten...')
    $time = TimerInit()
    $suche = GUICtrlRead($engl)
    $iRes = _ArraySearch($aSearch,$suche)
    GUICtrlSetData($Input4, "" & $aSearch[$iRes+1])
    #cs
    For $i = 1 To _FileCountLines($datei)
    If FileReadLine($datei, $i) = $suche Then
    ExitLoop
    EndIf
    Next
    GUICtrlSetData($Input4, ""&FileReadLine($datei, $i+1))
    #ce
    GUICtrlSetData($Edit1, 'Suche nach "'&GUICtrlRead($engl)&'" erfolgreich! Zeit: '&Round(TimerDiff($time)/1000, 3)&"s")

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

    EndSwitch
    WEnd

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

    dann sind solche Antwortzeiten normal:
    autoit.de/wcf/attachment/11814/

    Und wenn du dann noch af _ArrayFindAll umstellst, kannst du auch alle entsprechenden Wörter anzeigen, bedingt aber evtl. Umbau der GUI also überlasse ich es dir,

    mfg autoBert

  • Jo das hab ich, besser selbst abgeschrieben als irgendwelche Lizenzen verletzen. Danke Autobert!

  • autoBert, ich brauch nochmal deine Hilfe, anscheinend weißt du ja, im Gegensatz zu mir, wie man alle entsprechenden Wörter ausgibt. Ich finde ein Umbau der Gui ist nicht nötig, wie kann ich alle ergebnisse in die Ergibnissinputbox ausgeben, getrennt mit komma? Das mit dem Komme weiß ich aber wie alle Ergebnisse rausfinden?

  • Toller Script!
    Nur eine Sache:

    Wenn man den Script startet. Dann steht doch oben in der Input "Deutsch..." Wenn man das so lässt und "Translate" klickt,
    dann kommt eine Errormedlung. Kannst ja beheben wenn Du magst.

  • Hier die Ausgabe aller Treffer:

    Spoiler anzeigen
    [autoit]

    ;by cambweb, AutoBert (Arraysearch)
    #include <File.au3>
    #include <Array.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    $datei = @ScriptDir & "\dic.dic"
    Global $aSearch[1]
    _FileReadToArray($datei, $aSearch)

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

    #Region ### START Koda GUI section ### Form=
    $Translato = GUICreate("Translator by campweb | DE<>BE/AE", 322, 291, 391, 158)
    $Label1 = GUICtrlCreateLabel("Von Deutsch zu Englisch:", 8, 8, 126, 17)
    $deutsch = GUICtrlCreateInput("Deutsch...", 8, 32, 305, 21)
    $Input2 = GUICtrlCreateInput("Englisch...", 8, 56, 305, 21, BitOR($ES_AUTOHSCROLL, $ES_READONLY))
    $Button1 = GUICtrlCreateButton("Übersetzen", 8, 80, 305, 25, 0)
    $Label2 = GUICtrlCreateLabel("From English to German:", 8, 112, 119, 17)
    $engl = GUICtrlCreateInput("English...", 8, 136, 305, 21)
    $Input4 = GUICtrlCreateInput("Deutsch...", 8, 160, 305, 21, BitOR($ES_AUTOHSCROLL, $ES_READONLY))
    $Button2 = GUICtrlCreateButton("Translate", 8, 184, 305, 25, 0)
    $Edit1 = GUICtrlCreateEdit("", 8, 216, 305, 65)
    GUICtrlSetData(-1, "Edit1")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    GUICtrlSetData($Edit1, "Initialisiere...")
    Sleep(1000)
    GUICtrlSetData($Edit1, 'Beginne Suche nach: "' & GUICtrlRead($deutsch) & '" Bitte warten...')
    $time = TimerInit()
    $suche = GUICtrlRead($deutsch)
    $iRes = _ArrayFindAll($aSearch, $suche)
    Dim $ausgabe = ""
    For $element In $iRes
    $ausgabe = $ausgabe & $aSearch[$element - 1] & ","
    Next

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

    GUICtrlSetData($Input2, "" & $ausgabe)
    GUICtrlSetData($Edit1, 'Suche nach "' & GUICtrlRead($deutsch) & '" erfolgreich! Zeit: ' & Round(TimerDiff($time) / 1000, 3) & "s")
    Case $Button2
    GUICtrlSetData($Edit1, "Initialisiere...")
    Sleep(1000)
    GUICtrlSetData($Edit1, 'Beginne Suche nach: "' & GUICtrlRead($engl) & '" Bitte warten...')
    $time = TimerInit()
    $suche = GUICtrlRead($engl)
    $iRes = _ArrayFindAll($aSearch, $suche)
    Dim $ausgabe = ""
    For $element In $iRes
    $ausgabe = $ausgabe & $aSearch[$element + 1] & ","
    Next

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

    GUICtrlSetData($Input4, "" & $ausgabe)
    GUICtrlSetData($Edit1, 'Suche nach "' & GUICtrlRead($engl) & '" erfolgreich! Zeit: ' & Round(TimerDiff($time) / 1000, 3) & "s")

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

    EndSwitch
    WEnd

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

    Func _search()

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

    EndFunc

    [/autoit]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • chip

    Ja wenn ich jetzt Schrank eingebe, bekomme ich alle ergebnisse, aber wenn ich cabinet bei Englisch eingebe, bekomme ich "a" und nicht die ganzen deutschen wörter!

  • Schau nochmal rein, hatte da nochmal editiert gehabt.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Hallo campweb,

    hier das angepasste Skript:

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    #include <Array.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    $datei = @ScriptDir & "\dic.dic"
    Global $aSearch[1]
    _FileReadToArray($datei,$aSearch)

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

    #Region ### START Koda GUI section ### Form=
    $Translato = GUICreate("Translator by campweb | DE<>BE/AE", 322, 291, 391, 158)
    $Label1 = GUICtrlCreateLabel("Von Deutsch zu Englisch:", 8, 8, 126, 17)
    $deutsch = GUICtrlCreateInput("Deutsch...", 8, 32, 305, 21)
    $Input2 = GUICtrlCreateInput("Englisch...", 8, 56, 305, 21, BitOR($ES_AUTOHSCROLL,$ES_READONLY))
    $Button1 = GUICtrlCreateButton("Übersetzen", 8, 80, 305, 25, 0)
    $Label2 = GUICtrlCreateLabel("From English to German:", 8, 112, 119, 17)
    $engl = GUICtrlCreateInput("English...", 8, 136, 305, 21)
    $Input4 = GUICtrlCreateInput("Deutsch...", 8, 160, 305, 21, BitOR($ES_AUTOHSCROLL,$ES_READONLY))
    $Button2 = GUICtrlCreateButton("Translate", 8, 184, 305, 25, 0)
    $Edit1 = GUICtrlCreateEdit("", 8, 216, 305, 65)
    GUICtrlSetData(-1, "Edit1")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    ; GUICtrlSetData($Edit1, "Initialisiere...")
    ; Sleep(1000)
    GUICtrlSetData($Edit1, 'Beginne Suche nach: "'&GUICtrlRead($deutsch)&'" Bitte warten...')
    $time = TimerInit()
    $suche = GUICtrlRead($deutsch)
    $aRes = _ArrayFindAll($aSearch,$suche)
    $sFound = ""
    $j = UBound($aRes)
    if IsArray($aRes) Then
    for $i = 0 to $j-1
    if $aRes[$i] > 0 and $aRes[$i] < $aSearch[0]-1 Then
    $sFound &= $aSearch[$aRes[$i]-1]
    if $i <> $j-1 Then $sFound &= ", "
    EndIf
    Next
    EndIf
    GUICtrlSetData($Input2,$sFound)
    #cs
    For $i = 1 To _FileCountLines($datei)
    If FileReadLine($datei, $i) = $suche Then
    ExitLoop
    EndIf
    Next
    GUICtrlSetData($Input2, ""&FileReadLine($datei, $i-1))
    #ce
    GUICtrlSetData($Edit1, 'Suche nach "'&GUICtrlRead($deutsch)&'" erfolgreich! Zeit: '&Round(TimerDiff($time)/1000, 3)&"s")
    Case $Button2
    ; GUICtrlSetData($Edit1, "Initialisiere...")
    ; Sleep(1000)
    GUICtrlSetData($Edit1, 'Beginne Suche nach: "'&GUICtrlRead($engl)&'" Bitte warten...')
    $time = TimerInit()
    $suche = GUICtrlRead($engl)
    $aRes = _ArrayFindAll($aSearch,$suche)
    $sFound = ""
    $j = UBound($aRes)
    if $j > -1 Then
    for $i = 0 to UBound($aRes) -1
    if $aRes[$i] > 0 and $aRes[$i] < $aSearch[0] Then
    $sFound &= $aSearch[$aRes[$i]+1]
    if $i <> $j-1 Then $sFound &= ", "
    EndIf
    Next
    EndIf
    GUICtrlSetData($Input4,$sFound)
    #cs
    For $i = 1 To _FileCountLines($datei)
    If FileReadLine($datei, $i) = $suche Then
    ExitLoop
    EndIf
    Next
    GUICtrlSetData($Input4, ""&FileReadLine($datei, $i+1))
    #ce
    GUICtrlSetData($Edit1, 'Suche nach "'&GUICtrlRead($engl)&'" erfolgreich! Zeit: '&Round(TimerDiff($time)/1000, 3)&"s")

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

    EndSwitch
    WEnd

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

    ob der Platz in der Ausgabe wirklich überall reicht musst du selbst austesten,

    Edit: man sollte den FF öfter refreshen, chip war schneller

    mfg autoBert

  • FISO,

    mit Excel sollte es über die Excel.au3, eineUDF die bei AutoIt dabei ist, problemlos möglich sein. Schau dir einfach die Beispiele in der Hilfe (benutzerdefinierte Funktionen | Excel-Management) an.
    Aber auch Access sollte man verwenden können, wenn man sich durch das Access-Objekt-Modell quält.

    mfg autoBert