Wortsuche+Zeilenausgabe aus txt'

  • :rolleyes: Es kann natürlich sein das ich nicht ganz durchblick , aber wenn ich mich nicht irre blendet er nur die letzten Suchergebnisse aus während gesucht wird. Mit GUICtrlSetData($ergebnisanzeige2, $re, "-") müsste es zwar eigentlich gehen (so stehts auch inder Deutschen Hilfe) aber das tuts einfach nicht.

  • gehts um das löschen der liste?

    Du kannst ja einfach machen:

    Zeige das ergebniss an und dann setze $ergebniss = ""

    So sezt man das doch zurück^^

  • Danke,
    ich stand einfach auf dem Schlauch :hammer:(wollt immer die EditBox dazu bringen bei jeder Wertänderung sich zurückzusetzten)

    • Offizieller Beitrag

    Hi,

    in dem letzten Skript was ich gepsotet habe, habe ich

    [autoit]

    Func suchen ()
    GUICtrlSetData($ergebnisanzeige2, "")
    $re = returnLineIfWordFound(GUICtrlRead($eingabe7))
    For $i = 0 To 100
    GUICtrlSetData($progress, $i)
    Sleep(15)
    If GUICtrlRead($progress) = 100 Then GUICtrlSetData($label9, "Die Suche nach <" & GUICtrlRead($eingabe7) & "> ist abgeschlossen!")
    Next
    GUICtrlSetData($ergebnisanzeige2, $re, "-")
    EndFunc ;==>suchen

    [/autoit]

    dies geschrieben. Die 2te Zeile leert die EditBox oder verstehe ich die Diskussion nicht?

    So long,

    Mega

  • Doch, du hast schon recht, doch wenn ich mich nicht irre sorgt

    [autoit]

    GUICtrlSetData($ergebnisanzeige2, "")

    [/autoit]


    nur dafür dass nichts (also"") dazugeschrieben wird. Es wird nicht alles vorhandene = "" gesetzt sondern alles vorhandene + "" gemacht. So müsste es aber funktionieren:

    [autoit]

    Func suchen ()
    GUICtrlSetData($ergebnisanzeige2, "")
    $re = returnLineIfWordFound(GUICtrlRead($eingabe7))
    For $i = 0 To 100
    GUICtrlSetData($progress, $i)
    Sleep(15)
    If GUICtrlRead($progress) = 100 Then GUICtrlSetData($label9, "Die Suche nach <" & GUICtrlRead($eingabe7) & "> ist abgeschlossen!")
    Next
    $ergebniss=""
    GUICtrlSetData($ergebnisanzeige2, $re, "-")
    EndFunc ;==>suchen

    [/autoit]


    Vielleicht hast du aber recht und es gehen beide Lösungen.

  • Ich habe es zwar getestet, aber da ist mir wahrscheinlich ein Fehler unterlaufen, ich hab hier doch die richtige Vers. der Datei , oder?

    [autoit]

    #include <file.au3>
    #include <Array.au3>
    #include <GUIConstants.au3>


    Global $datei = FileOpenDialog("Vocabeldatenbank auswählen", @DesktopDir, "Lateinvoc.Dok (*.txt)")
    HotKeySet("{ENTER}", "suchen")
    GUICreate("Lateinvocabeldatenbanksuche", 305, 250)
    GUISetState(@SW_SHOW)

    Global $ergebniss
    Global $aRecords[100]


    $schliesen1 = GUICtrlCreateButton("&Schließen", 236, 214, 62, 31, -1, -1)
    $ergebnisanzeige2 = GUICtrlCreateEdit("" & @CRLF, 1, 104, 304, 107, $ES_AUTOVSCROLL + $WS_VSCROLL)
    $progress = GUICtrlCreateProgress(2, 213, 213, 14, -1, -1)
    $Suche4 = GUICtrlCreateButton("Suchen", 236, 77, 62, 20, -1, -1)
    $hilfe5 = GUICtrlCreateButton("&Hilfe", 260, 6, 38, 22, -1, -1)
    $anweisung6 = GUICtrlCreateLabel("Bitte geben sie die lateinische Bedeutung des gesuchten Worts hier ein:", 6, 6, 227, 26, -1, -1)
    $eingabe7 = GUICtrlCreateInput("Bitte gesuchten Begriff hier eingeben!", 2, 35, 303, 19, -1, -1)
    $label8 = GUICtrlCreateLabel("Ergebnissanzeige der Suche:", 4, 86, 186, 13, -1, -1)
    $label9 = GUICtrlCreateLabel("", 2, 230, 235, 13, -1, -1)
    GUICtrlSetFont($label9, 7)

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $schliesen1
    Exit
    Case $msg = $hilfe5
    MsgBox(0, "Lateinvocabeldatenbanksuche", "by: vinschni " & @CRLF & "th.meger" & @CRLF & "peethebee" & @CRLF & "Huggy")
    Case $msg = $Suche4
    suchen()
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    EndSelect
    WEnd

    Func suchen ()
    GUICtrlSetData($ergebnisanzeige2, "")
    $re = returnLineIfWordFound(GUICtrlRead($eingabe7))
    For $i = 0 To 100
    GUICtrlSetData($progress, $i)
    Sleep(15)
    If GUICtrlRead($progress) = 100 Then GUICtrlSetData($label9, "Die Suche nach <" & GUICtrlRead($eingabe7) & "> ist abgeschlossen!")
    Next
    GUICtrlSetData($ergebnisanzeige2, $re, "-")
    EndFunc ;==>suchen

    Func returnLineIfWordFound($search)
    _FileReadToArray($datei, $aRecords)
    For $x = 1 To $aRecords[0]
    If StringInStr($aRecords[$x], $search) <> 0 Then $ergebniss = $ergebniss & @CRLF & $aRecords[$x]
    Next
    Return $ergebniss
    EndFunc ;==>returnLineIfWordFound

    [/autoit]


    Ich habs noch 3 Mal gestestet und immer wurden die Suchergebnisse an die vorherigen angehängt.

  • Dankel,
    weißt du auch warum bei der Ergebnissanzeige immer eine Zeile freibleibt(oben) und dann erst dass Suchergebniss kommt?

  • Du bist echt klasse, :klatschen:
    jetzt funktioniert alles wie am Schnürchen!
    th.meger hat gesagt er hätte noch einige Verbesserungsvorschläge, da wollt ich fragen, ob es etwas gibt was dir in dem Script fehlt?

  • Hi,
    ich bin gerade dabei der Datenbanksuche eine Möglichkeit zu geben dass der Benutzer Änderungen, die er im Edit gemacht hat speichern kann. Ich habe aber kene möglichkeit gefunden in AutoIt Dinge in einer Textdatei zu ersetzen, oder zu löschen, aber ich denke da gibt mit Sicherheit eine, oder?

  • Ja, das wusste ich schon, gibt es aber etwas wie FileReset("Text1", durch "Text")oder so etwas? Sonst müsste man ja die Zeile rausfinden lassen, aus welcher das ergebniss stammt und dann diese Zeile löschen und durch die Änderungen aus dem Editfeld ersetzte.

  • Ich möchte mich entschuldigen, ich habs einfach nicht gefunden. :hammer:


    Ich hab noch mal etwas verbessert:

    [autoit]

    If $datei = "" Then Exit

    [/autoit]


    und habe einen Button inigriert der Änderungen der Suchergebnisse(um die Datenbank zu verbessern bzw zu korrigieren) leider funktioniert es nicht.

    Spoiler anzeigen
    [autoit]

    #include <file.au3>
    #include <Array.au3>
    #include <GUIConstants.au3>


    Global $datei = FileOpenDialog("Vocabeldatenbank auswählen", @ScriptDir, "Lateinvoc.Dok (*.txt)")
    If $datei = "" Then Exit

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

    HotKeySet("{ENTER}", "suchen")
    GUICreate("Lateinvocabeldatenbanksuche", 305, 250)
    GUISetState(@SW_SHOW)

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

    Global $ergebniss
    Global $aRecords[100]
    $key = "{F2}"

    $schliesen1 = GUICtrlCreateButton("&Schließen", 236, 214, 62, 31, -1, -1)
    $ergebnisanzeige2 = GUICtrlCreateEdit("" & @CRLF, 1, 104, 304, 107, $ES_AUTOVSCROLL + $WS_VSCROLL)
    $progress = GUICtrlCreateProgress(2, 213, 213, 14, -1, -1)
    $Suche4 = GUICtrlCreateButton("Suchen",160, 77, 62, 20, -1, -1)
    $hilfe5 = GUICtrlCreateButton("&Hilfe", 260, 6, 38, 22, -1, -1)
    $anweisung6 = GUICtrlCreateLabel("Bitte geben sie die lateinische Bedeutung des gesuchten Worts hier ein:", 6, 6, 227, 26, -1, -1)
    $eingabe7 = GUICtrlCreateInput("Bitte gesuchten Begriff hier eingeben!", 2, 35, 303, 19, -1, -1)
    $label8 = GUICtrlCreateLabel("Ergebnissanzeige der Suche:", 4, 86, 150, 13, -1, -1)
    $label9 = GUICtrlCreateLabel("", 2, 230, 235, 13, -1, -1)
    $speichern10 = GUICtrlCreateButton("&Speichern", 236, 77, 62, 20, -1, -1)
    GUICtrlSetFont($label9, 7)

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $schliesen1
    Exit
    Case $msg = $hilfe5
    MsgBox(0, "Lateinvocabeldatenbanksuche", "by: vinschni " & @CRLF & "th.meger" & @CRLF & "peethebee" & @CRLF & "Huggy")
    MsgBox(0, "Neue Vocabeln speichern", "Wenn man neue Vocabeln speichern will muss man während dem <Speichern> F2 drücken.")
    Case $msg = $Suche4
    suchen()
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    Case $msg = $speichern10
    if _IsPressed($key) Then
    FileWrite($datei, GUICtrlRead($ergebnisanzeige2))
    Else
    _ReplaceStringInFile($datei, $ergebniss, GUICtrlRead($ergebnisanzeige2))
    EndIf
    EndSelect
    WEnd

    Func suchen ()
    GUICtrlSetData($ergebnisanzeige2, "")
    $re = returnLineIfWordFound(GUICtrlRead($eingabe7))
    For $i = 0 To 100
    GUICtrlSetData($progress, $i)
    Sleep(15)
    If GUICtrlRead($progress) = 100 Then GUICtrlSetData($label9, "Die Suche nach <" & GUICtrlRead($eingabe7) & "> ist abgeschlossen!")
    Next

    GUICtrlSetData($ergebnisanzeige2, $re, "-")
    EndFunc ;==>suchen

    Func returnLineIfWordFound($search)
    $ergebniss=""
    _FileReadToArray($datei, $aRecords)
    For $x = 1 To $aRecords[0]
    If StringInStr($aRecords[$x], $search) <> 0 Then $ergebniss = $ergebniss & @CRLF & $aRecords[$x]
    Next
    Return StringTrimLeft($ergebniss, 1)
    EndFunc ;==>returnLineIfWordFound

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


    es ligt an _IsPressed, aber ich weiß nicht wie ichs anstellen soll. _ReplaceStringInFile sollte zwar eigentlich funktionieren(habs in nem anderen Script getestet, sollte nicht an der Syntax liegen) es zeigt aber keine Wirkung.
    Bitte um Hilfe!

  • du hast $key mit = {F2} definiert... da gibts ne liste in der hilfe, jede taste hat ne nummer bzw zahl!

    die musst du nehmen

    • Offizieller Beitrag

    Hi,

    zum Fehler, guck dir einfach mal das Bsp von _isPressed an, dann solltest du es finden. + Anmerkung von huggy. ;)

    Verbesserungsvorschlag 1:

    IniDatei a la config.ini Hier wird die zuletzt geöffnete Datei gespeichert. Beim Start den wert prüfen und ggf. automatisch die letztgeöffnete Datei öffnen.

    So long,

    Mega

  • Ich hatte immer die alte Version der Hilfe(englisch+deutsch) darum, ich hab mich schon gewundert warum da nichts drinsteht. Oh man, danke :hammer: