Oscars Listview-Datenbank v3 - mit Suche nach mehreren Begriffen

  • Hallo,

    auf meiner Suche nach einen Datenbanklösung im Thread

    Ideen gesucht – Baum – Stamm – Blatt

    wo es um eine Ideensammlung geht, habe ich

    Oscars Listview-Datenbank v3

    Listview-Datenbank v3

    aus dem Jahr 2017 gefunden.

    Wird das Programm noch weiter entwickelt?

    Hat jemand von Euch die +und / -nicht Suche bereits in Oscars Script implementieren können?

    Was kann ich an welcher Stelle in Oscars Skript ändern, so dass nach mehreren - durch Leerzeichen getrennten - Suchbegriffen gefiltert wird?

    Beispiel für 4, durch Leerzeichen getrennte, Suchebegriffe, die so im Suchfeld eingegeben werden sollen:

    Abel 312 46687 19.01.2017

    Noch besser wäre eine +und / -nicht Suche

    Beispiel

    +Abel +312 +46687 +19.01.2017 -Reh

    An welcher Stelle und wie kann diese in Oscars "Listview-Datenbank v3" integriert werden?

    Wie kann ich in der gefilterten (grün unterlegten) Ansicht den aktuell ausgewählten Datensatz in die Zwischenablage legen, nachdem er mit strg + Doppelklick ausgewählt wurde?

    ClipPut ( ??? )

    PS: ich lese mich in die von water angeregte Datenbank ein (edit: Oscars Script ist für meine Zwecke besser) und schaue mir dann weiter Oscars Script an. Das enthält viel Stoff.

    Edit:

    bisher gelöst

    automatisches Laden der Datenbank beim Start des Programmes

    umschalten auf gefilterte Suche, ohne "shift" zu drücken

    Icons geändert - shell.dll - Total Commander View - dank Beitrag - Icons in shell32.dll

    7 Mal editiert, zuletzt von Banana_2_Day (8. Oktober 2019 um 13:03)

  • Wie kombiniere ich mehrere Suchbegriffe?

    Text

    Der Hund hat die Katzen in das Waldgrundstück gejagt.

    Die zwei Katzen sind in den Wald gelaufen.

    Suchbegriffe (Hinweis: Die Reihenfolge der Suchbegriffe ist in der Praxis beliebig austauschbar.)

    Hund Katze Wald

    Ergebnis

    Der Hund hat die Katzen in das Waldgrundstück gejagt.

    Was ist besser geeignet? StringRegExp oder _ArraySearch?

    Wie verknüpfe ich bei StringRegExp und _ArraySearch mehrere Suchbegriffe in einer Befehlszeile?

    Edit

    Gedanke zu StringRegExp - da die Worte in der Reihenfolge wechseln können, scheidet StringRegExp wohl aus für eine UND-Suche.

    Bleiben

    _ArraySearch

    StringInString

    2 Mal editiert, zuletzt von Banana_2_Day (8. Oktober 2019 um 14:47)

    • Offizieller Beitrag

    Gedanke zu StringRegExp - da die Worte in der Reihenfolge wechseln können, scheidet StringRegExp wohl aus für eine UND-Suche.

    Bei einer UND Suche ist die Reihenfolge völlig schnuppe:

  • Bei einer UND Suche ist die Reihenfolge völlig schnuppe:

    Ich glaub du hastn Brett vorm Kopf. Der Sinn RegEx zu nutzen ist es ja das ganze eleganter auszudrücken und abzukürzen.

    Bei 'Oder' hätte man einfach (Hund|Katze|Wald) nehmen können, aber wenn alle drei vorkommen sollen können diese die Reihenfolge wechseln.

    Da kann man auch gänzlich auf StringRegExp verzichten und StringInStr nehmen, das macht mMn. den Code lesbarer, da er sowieso auf drei Funktionen aufgesplittet wird.

    Natürlich gibt es Pattern um die Reihenfolge zu berücksichtigen, aber ich finde die beste Lösung ist es StringInStr zu nehmen, und es dreifach in eine If-Verzweigung zu packen.

    Jajaja, ich hörs ja schon... Es nimmt sich funktional fast nichts wenn man StringInStr "Hund" oder StringRegExp "Hund" verwendet, aber StringInStr passt besser.

    • Offizieller Beitrag

    Ich glaub du hastn Brett vorm Kopf. Der Sinn RegEx zu nutzen ist es ja das ganze eleganter auszudrücken und abzukürzen.

    Und ich glaub, du bist auf Krawall gebürstet. :P

    Ich bin nur darauf eingegangen, dass eine UND-Verknüfung sehr wohl mit RegExp möglich ist (es war nicht die Rede davon, dass das im Pattern passieren muss). Ob das sinnvoll ist, stand gar nicht zur Debatte. Das muss eh jeder für sich selbst einordnen.

    Wirklich "sinnvoll" ist weder RegExp noch StringInStr. Wie schon in dem Thread, auf dem dieser basiert, besprochen, sollte man das mit SQLite lösen. Elegant, geschmeidig und sauschnell auch bei zigtausend Einträgen. :thumbup:

  • SQLite

    Ich habe mir Dein sehr interessantes Beispiel zu SQLite angesehen. Das ist ein weiter Weg bis dahin, mit 0 Erfahrungen in SQLite und der AutoItObject_X64.dll von der englischen AutoIt Seite - etwas für lange Winterabende.

    Gelingt es Dir BugFix mit annehmbarem Aufwand, in Oscars Listview Datenbank Dein SQLite Beispiel aus dem folgendem Thread zu integrieren?

    Datenbank Filtern mit Objekt

    Die UND Suche funktioniert damit 1a.

    Wenn es zu schwer ist, bohre ich mit Euch lieber Oscars Script auf und mache mit Euch aus einer einfachen Suche eine +UND / -NICHT Suche.

    Würdet Ihr einen Blick ins Oscars Script werfen, an welcher Stelle genau geschraubt werden muss? Ich habe mich dort festgefahren.

    Einmal editiert, zuletzt von Banana_2_Day (8. Oktober 2019 um 17:40)

    • Offizieller Beitrag

    Eine umfangreiche Suche (mit mehreren Suchwörtern) würde ich auch lieber in SQLite ausführen. Das ist mit AutoIt-Mitteln nicht sehr schnell. Besonders bei umfangreichen Datensätzen.

    Verschwende nicht die Zeit mit dem "aufbohren" meines Scripts, sondern benutze für die Verwaltung SQLite. Damit lassen sich sehr universelle Suchmuster erstellen.

    • Offizieller Beitrag

    Ich lass mal ein paar Gedanken los.

    - Du möchtest die Möglichkeit haben die Suchbegriffe ohne fixe Reihenfolge einzugeben.

    - Die Bedienung soll per Mausklick erfolgen.

    Das kann man mit SQLite-DB lösen, ist aber auch noch nicht optimal an diese Situation angepasst (Schwachstelle: ungewisse Reihenfolge der Suchbegriffe).

    Was ist für eine optimale Lösung erforderlich?

    - Eingabe irgendeines Begriffes aus der Suchkette sollte sowohl abwärts (Children) als aufwärts (Parent) rekursiv verfügbare Begriff(ketten) auflisten

    - Durch diese Begriffe kann man sich dann zum Ziel durchklicken bzw. wenn ein Eintrag fehlt, diesen neu erfassen.

    - Begriffe sollten also mit entsprechenden Verweisen (auf/abwärts) gespeichert sein

    Die Aufgabe lautet also: Welche Datenbank(struktur) ermöglicht dieses schwarmartige Speichern. Hier würde ich Ansetzen und das wäre doch auch mal eine interessante Aufgabe, sowas in AutoIt umzusetzen.

    Ich habe keine Ahnung, ob und wie das umzusetzen geht. - Sind halt nur Gedanken.

  • Hallo Banana_2_Day

    Es genügt, dass du dir ein Trennzeichen überlegst (im Zweifel eben das Leerzeichen), den "gesamten Suchbegriff" danach trennst und in der Gesamtliste nach dem ersten Begriff suchst und dann in Schleife in den jeweils übrigbleibenden Trefferlisten nach den weiteren Begriffen suchst. Also einfach die Suche in eine solche Schleife packen.

    Grüße autoiter

  • Eine umfangreiche Suche (mit mehreren Suchwörtern) würde ich auch lieber in SQLite ausführen. Das ist mit AutoIt-Mitteln nicht sehr schnell.

    Die Suche kann langsam sein.Es wird über den Tag verteilt ca. 20x jeweils eine Suche sein, um die Verknüpfung zu erhalten.

    Die Daten bestehen lediglich aus

    Stichworten ( mehrere Stichworte durch ein Leerzeichen getrennt )

    und eine Verknüpfung ( Pfad, URL etc. )

    Beispiel:

    "Oscars Listview-Datenbank v3 - mit Suche nach mehreren Begriffen" ; "h t t p s://autoit.de/thread/86654-oscars-listview-datenbank-v3-mit-suche-nach-mehreren-begriffen/"

    Die Suche ist beschränkt auf die Stichworte. Es wird also nur gesucht in der Zeichenkette

    "Oscars Listview-Datenbank v3 - mit Suche nach mehreren Begriffen"

    ...

    Sagst Du mir bitte, wo genau ich in Deinem Skript ansetzen muss, um die Suche von einem Suchparameter in mehrere Suchparameter zu ändern?

    Dann würde ich das gerne versuchen.

    Und vielleicht hast Du auf die zweite Frage eine Antwort:

    Wie kann ich in der gefilterten (grün unterlegten) Ansicht in Deiner Datenbank den aktuell ausgewählten Datensatz in die Zwischenablage legen, nachdem er mit strg + Doppelklick ausgewählt wurde?

    ClipPut ( ??? )


    Alle anderen Varianten sind für den Winter eine gute Idee, im Moment würde ich gerne auf Deine funktionierende Datenbank zurückgreifen.

    Es fehlt nur die Filterung nach mehreren Worten.

    Welche Datenbank(struktur) ermöglicht dieses schwarmartige Speichern

    Vielleicht ist es hilfreich zu erwähnen, dass die zu durchsuchenden Daten jeweils ein Datensatz = eine Zeile sind.

    Und es muss somit nur das Vorkommen alle Suchbegriffe in dem ein Datensatz über zum Beispiel StringInString sichergestellt sein. Sehe ich das richtig?


    Trennzeichen überlegst (im Zweifel eben das Leerzeichen)

    So habe ich mir das auch gedacht. Im Moment finde ich in Oscars Datenbank nicht die richtige Stelle, um das zu versuchen.

    Die Idee, die SQLite von bugfix mit der Datenbank (Oberfläche) von Oskar zu mischen gebe ich erst mal auf, dazu fehlen mir die Kenntnisse und es scheint komplizierter zu sein, ansonsten hätte bugfix bestimmt eine Variante veröffentlicht.

    Einmal editiert, zuletzt von Banana_2_Day (9. Oktober 2019 um 20:38)

  • Hallo Banana_2_Day

    Einerseits finde ich einen Wechsel zu SQLite überhaupt nicht kompliziert und halte das definitiv für eine Alternative.

    Andererseits hängt das auch von deinen Inhalten ab. Irgendwo hatte ich gelesen, um was es geht. Jetzt finde ich es aber nicht. Jedenfalls sah das nicht nach großen Datenmengen aus. Wenn das der Fall ist, geht es sicher auch flott ohne SQLite.

    Deine Frage nach der Skriptstelle lässt mich etwas ratlos zurück. Das ist schon ein Schlag in Oscars Gesicht, weil er sich hier richtig Mühe mit der Kommentierung gegeben hat. Hast du überhaupt danach gesucht?$iStart = _GUICtrlListView_FindInText($idListView, $sSearch, $iStart, False) ; Suche im Listview

    Grüße autoiter

  • Andererseits hängt das auch von deinen Inhalten ab.

    Danke für Deine Zeile. Die Stelle habe ich gesehen.

    $iStart = _GUICtrlListView_FindInText($idListView, $sSearch, $iStart, False)

    In Oscars Beitrag stand was von Verwendung von Arrays - daher bin ich davon ausgegangen, dass das über _ArraySearch laufen müsse.

    Das verwirrt mich jetzt noch mehr.

    Oscar schreibt in Post 1 zu seiner Datenbank:

    "alle Daten werden in ein Array geladen, eingegeben, sortiert, dort gesucht und von dort gespeichert."

    Listview-Datenbank v3

    _GUICtrlListView_FindInText ist doch kein Suchbefehl für ein Array.

    ... ratlos ...

    Im Beitrag über Deinem schrieb ich, wie mein Datensatz typisch aussieht - 2 Einträge pro Zeile:

    Beispiel:

    "Oscars Listview-Datenbank v3 - mit Suche nach mehreren Begriffen" ; "h t t p s://autoit.de/thread/86654-oscars-listview-datenbank-v3-mit-suche-nach-mehreren-begriffen/"

    Ich habe mich bei der Suche in Oscars Script festgefahren. Gestern und heute mehrere Stellen getestet. Die meisten offenen Sachen konnte ich ändern, bis auf 2 - UND-Suche und Strg + Mausklick auf ein Element mit Kopie in Zwischenablage.

  • Nun, ich hatte das Skript von Oscar mal heruntergeladen und darin nach "find" gesucht und das gefunden.

    Kann sein, dass in einer neueren Version umgestellt wurde. Hast du denn gesucht und etwas gefunden?

    Ist nicht böse gemeint. Aber es gibt hier auch Bereiche, in denen man die Erstellung eines Skripts erfragen kann - mit oder ohne Gegenleistung.
    Kann es sein, dass du dort besser aufgehoben bist?

    Grüße autoiter

  • Kann sein, dass in einer neueren Version umgestellt wurde.

    Ich nehme es positiv auf und freue mich über jede Hilfe. Gibt viel zu lernen. Das Script habe ich - soweit meine Kenntnisse reichen - Zeile für Zeile gelesen, wenn auch nicht komplett verstanden.

    autoiter, vielleicht kannst Du die andere Frage beantworten, wie in einem Listview eine Zeile mit strg + Mausklick in die Zwischenablage gelegt werden kann. Weißt Du das?

    Unter dem Link "Oscars Datenbank" ist die letzte Version veröffentlicht, die ich auch nutze.

    Daher hoffte ich, dass Oscar schreibt, an welcher Stelle die Arraysuche in seinem Script maßgeblich greift und wo man ggf. mit AND mehrere Parameter integrieren kann.

    Aber es gibt hier auch Bereiche, in denen man die Erstellung eines Skripts erfragen kann - mit oder ohne Gegenleistung.

    Das wäre einen Versuch wert.

    Vielleicht ist dort jemand, der die Zeilen von Oscar (Oberfläche) und Bugfix (SQLite) vereinen kann. Das wäre es :)

    • Offizieller Beitrag

    Ich würde das machen, aber momentan befinde ich mich im Urlaub auf Helgoland (noch bis Sonntag).

    Also frühestens Montag. Vorher würde ich das nicht schaffen.

    Es wäre aber in jedem Fall hilfreich, wenn Du uns mal einige (Beispiel-)Datensätze zur Verfügung stellst.

    Möglichst als Datei (Txt-Format reicht).

    Außerdem wie die Daten dann im Listview stehen sollen (Anzahl der Spalten) und nach was Du dann suchen willst.

  • Ich würde das machen, aber momentan befinde ich mich im Urlaub auf Helgoland (noch bis Sonntag).

    Hallo Oscar,

    iIch hoffe, Du hattest erholsame Tage. Komme auch gerade aus dem Urlaub zurück :)

    Es wäre aber in jedem Fall hilfreich, wenn Du uns mal einige (Beispiel-)Datensätze zur Verfügung stellst.

    Datensätze durch Semikolon getrennt

    29.10.2019;PC Welt 2019-09.pdf;Lexmark Drucker 2400;c:\Dokumente\Zeitschriften\2019

    29.10.2019;PC Welt 2019-09.pdf;Windows 10 Fehler beim drucken;c:\Dokumente\Zeitschriften\2019

    29.10.2019;PC Welt 2019-09.pdf;Tintenstrahldrucker von 300 bis 400 dpi;c:\Dokumente\Zeitschriften\2019

    Suchbegriff (keine Unterscheidung von Groß- und Kleinschreibung ... wird nicht benötigt)

    Zeitschriften Druck 2019 09

    Ergebnis

    die 3 Datensätze aus obigem Beispiel

    gesucht wird in allen 4 Feldern (siehe unten)

    Außerdem wie die Daten dann im Listview stehen sollen (Anzahl der Spalten) und nach was Du dann suchen willst.

    Felder der Datenbank

    Datum

    Dateiname

    Suchbegriffe

    Datei-Pfad

    Wenn Du weitere Angaben brauchst, ergänze ich die gerne.

    Vielen Dank!

    • Offizieller Beitrag

    Ich habe gerade festgestellt, dass die Suche nach mehreren Suchbegriffen gar nicht so viel länger dauert.

    Ich durchsuche ja das Datenbank-Array und nicht das Listview, da ist AutoIt doch noch schnell genug (wobei das natürlich bei großen Datenmengen und vielen Suchbegriffen schnell ansteigt).

    Somit habe ich jetzt nur mein Script etwas erweitert/angepasst. Die wichtigsten Änderungen:

    1. In Zeile 27 kannst Du jetzt einen Pfad zu einer Datenbankdatei eintragen, die beim Programmstart geladen werden soll.

    2. Es gibt jetzt beim Listview ein Kontextmenü, in dem Du die markierten Einträge ins Clipboard kopieren kannst.

    3. Die Suche habe ich komplett umgestellt. Man kann mehrere Suchbegriffe eingeben, aber jeder Suchbegriff muss mit einem "+" oder "-" anfangen. Das Plus bedeutet: dieser Suchbegriff muss in der Zeile (egal welche Spalte) vorkommen. Minus bedeutet das Gegenteil (darf in der Zeile nicht vorkommen).

    4. Damit die Suche Groß-/Kleinschreibung unterscheidet, muss der Suchbegriff (ohne das Plus/Minus) in Anführungszeichen stehen.

    5. Das Format habe ich an Deine Datensätze/Felder angepasst.

    6. Ein paar "kosmetische" Änderungen.

  • jeder Suchbegriff muss mit einem "+" oder "-" anfangen

    Vielen Dank Oscar. Ich habe die Datei mit meiner Beispieldatei getestet.

    Wenn ich richtig getestet habe, darf es kein Leerzeichen zwischen den Suchbegriffen geben, also nicht:

    +Hund -Katze

    richtig wäre

    +Hund-Katze

    Stimmt das?