PS: einen interessanten Beitrag dazu fand ich hier
2D Array - Doppelte Beziehungen bestimmter Spalten in einem Array ermitteln und löschen
aber den verstehe ich noch weniger
PS: einen interessanten Beitrag dazu fand ich hier
2D Array - Doppelte Beziehungen bestimmter Spalten in einem Array ermitteln und löschen
aber den verstehe ich noch weniger
Dann gehst du das array durch und prüfst ob die einzelnen Worte nochmal irgendwo im array vorkommen (StringInStr), und löscht dann ggf.
Danke für den Hinweis, die Idee hatte ich zuvor ausgetestet.
Gehen wir davon aus, dass ich die Textzeile als Array gesplittet habe.
Mit der ersten For / Next Schleife durchlaufe ich das Array.
Ab da wird es für mich kompliziert.
Wie setze ich die Schleife so fort, dass ich nach einem gefundenen Element weiter suche, das vorherige Element lösche und dann weitersuche?
Wenn ich ein doppeltes Element gefunden und gelöscht habe, dann hat das Array eine andere Größe - die erste For/Next Schleife funktioniert nicht mehr, da diese von x Elementen und nicht x minus gelöschte Elemente ausgeht.
Auch weiß ich nicht, wie ich die Schleifen so ineinanderlege, dass das kein Kuddel Muddel wird.
Ich scheitere an der mehrfachen Verschachtelung und der Neuberechnung des Arrays.
Hast Du ein Beispiel dafür, wie es funktionieren könnte?
Hallo,
Quelle
das ist ein Hund\das ist eine Banane\das ist eine Katze\das ist ein Kakadu
Ziel
Hund\Banane\eine Katze\das ist ein Kakadu
Ich möchte von links beginnen und jedes Wort löschen, welches rechts vom aktuellen Begriff vorhanden ist.
Alle doppelten Worte sollen entfernt werden.
Achtung - der Backslash muss im Text und die Wortreihenfolge erhalten bleiben.
Wie kann ich das elegant umsetzen?
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!
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
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."
_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.
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.
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?
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.
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
Es gibt im engl. Forum eine Code-Schnipsel-Verwaltung
Danke. Das schaue ich mir gleich an.
Mit SQLite habe ich auch schonmal eine Live-Suchfunktion gebaut,
Das klingt nach einem interessanten Ansatz. Gibt es Dein Projekt hier im Forum?
SQL habe ich bisher nie genutzt. Das ist ein gutes Thema für lange Winterabende.
Nach langer Suche habe ich hier im Forum eine Datenbank von Oskar gefunden, die hilfreich sein könnte.Es fehlt im Endeffekt "nur" eine "und-Suche" - besser noch eine "+und" / "-nicht" Suche, bezogen auf eine Zeile.
Ich habe eine Zeit lang damit experimentiert und das scheint eine gute Lösung zu sein, ohne das sprichwörtliche Rad neu zu erfinden (Wink von Water).
ob Du hier das Rad neu erfinden solltest.
Dem kann ich zustimmen und bin froh, Oscars Script hier im Forum gefunden zu haben.
Daher setze ich das Thema hier auf gelöst, und arbeite das Thema neu auf, damit es verständlicher ist.
Hier geht es weiter:
Oscars Listview-Datenbank v3 - mit Suche nach mehreren Begriffen
Wer noch Ideen für grundlegende Konzepte hat, bitte weiter hier posten.
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
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
Ich bin mir nicht sicher, ob Du hier das Rad neu erfinden solltest.
Ich bin mir auch ganz sicher, dass es dazu bereits etwas gibt. Daher die Frage hier im Forum, weil bestimmt jemand schon mal für wenige Datensätze – wie hier von ca. 1000 Stück – bestimmt schon mal etwas in AutoIt programmiert hat.
Wie verwaltet Ihr Eure Datenschnipsel (Unabhängig von AutoIt und vielleicht sogar mit AutoIt)?
Besonders ideal wäre es, wenn die Reihenfolge der eingegebenen Suchwort egal wäre, und man dennoch zum Ziel käme.
Aber das dürfte – wie die Forumsuche und Google zeigen – noch komplizierter sein.
Weißt du denn eindeutig bei Stamm, dass du den bestimmten Ast absteigen musst und nicht einen anderen?
Ja, weil diese Struktur vorgegeben ist.
Wie z.B. in Aktenordner.
Es gibt mehrere Regale - für jedes Thema eins.
Es gibt Aktenordner als Teilthema.
Es gibt Hefter im Aktenordner als Unterthema.
Auf dem Schreibtisch liegen 100 Notizen, die eingeordnet werden sollen. Jeden Tag neue.
Das ist sehr zeitaufwendig - dafür suche ich einen einfachen - mit AutoIt automatisierten - Weg.
Schnipp - und jede der 100 Notizen ist im jeweils richtigen Aktenordner.
Wie in einer großen Bibliothek, wo täglich hunderte Bücher zurück an die richtige Stelle ins Regal einsortiert werden.
Wenn ich z.B. für eine CPU namens xyz Daten hinterlegen möchte, dann lautet der Weg
Computer - Hardware - CPU - ...
Wenn ich ein neues Schnitzel-Rezept speichern möchte, heißt der Weg
Essen - Rezepte - Schnitzel - ...
Der Weg soll so kurz und eindeutig (benutzerdefiniert) wie möglich sein, weil jeder Punkt durch einen Mausklick bedient werden muss.
Einkaufen - Fleisch - Schnitzel - ...
Der Startpunkt ist immer der Stamm - oberste Ebene.
Nimm z.B. die bei Heise News veröffentlichten Themen. Einige möchte ich speichern. Thematisch verschlagwortet.
Hallo,
ich suche Ideen für eine Umsetzung, wie mit AutoIt verschachtelte Stichworte verwaltet werden können.
Beispiel
Baum – Stamm – Ast – Zweig – Zweig – ... Zweig – Blatt - ID ( in der Kette sind mindestens zwei – maximal zehn Stichworte )
Obst - Banane - Schale - ID
Überschlagen wird es voraussichtlich 1000 Datensätze geben.
Am Ende der Kette steht immer eine ID, die für eine Datei mit allen relevanten Informationen steht.
Wie verwaltet man sowas am besten?
Wie stellt man sowas am besten in einer AutoIt-Oberfläche dar?
X Listenfelder Mit je einem abhängigen Stichwort nebeneinander werden schnell recht unübersichtlich, da es in der Kette 2 bis 10 Stichworte geben kann = das wären somit bis zu zehn Listenfelder nebeneinander.
Breadcums – Beispiel aus dem Heise Forum „Alle Heise-Foren > heise online > News-Kommentare > Alexas Frustrationserkennung:…“
So eine Darstellung wäre grundsätzlich denkbar. Wie könnte ich sowas so in AutoIt umsetzen, dass ich beim Klick auf jeden einzelnen Begriff die zugehörigen Begriffe sehen würde?
Das Beispiel vom Baum aufzugreifen – wenn ich auf Zweig 4 klicke, dann brauche ich eine Übersicht über alle Punkte in der Ebene 4.
Ziel ist es, eine Wissensdatenbank für spezielle Themen anzulegen, bei der man effektiv nichts wissen muss, in welcher Datei (ID) die Information zu diesem Zweig gespeichert sind.
Dadurch soll es leichter werden, neue Informationen zu bestehenden Informationen hinzuzufügen.
Beispiel Banane: wenn es neue Informationen zum Thema „Schale“ gibt, die gespeichert werden sollen, klickt man die Reihe entsprechend durch und die zugehörige Datei wird geöffnet.
Dabei ist es unabhängig, in welchem Dateiformat die Datei gespeichert wurde, weil die Datei In der ID mit dem kompletten Pfad hinterlegt ist.
Wie verwaltet Ihr kleine Datenschnipsel zu komplexen Themen, die häufiger – eventuell sogar mehrfach am Tag – ergänzt werden?
Wurde hier oder im englischsprachigen Forum zu diesem Thema beispielhaft etwas veröffentlicht?
Wie ich vorgehen würde:
- einklinken in die Windows-Messages (Hook)
- wenn Nachricht gesendet wird: SHOW an Fenster Taskbar
-- mit Handle des Senders der Nachricht
-- in Prozessauflistung nach diesem Handle suchen
Das klingt kompliziert. Gibt es das bereits als Programmbeispiel - oder ist das eine zu spezielle Fragestellung?
$HSHELL_FLASH
Notifies when some window is flashing (is followed with $HSHELL_REDRAW). Gives window handle.
Vielen Dank - ich lese mich ein. Das sieht nach einem Ansatz aus.
Ich befürchte, irgendein Programm sorgt dafür, dass etwas schief läuft.
flashing der Icons scheint nicht sichtbar zu sein, weil ein Teil der explorer Funktionalität abgestürzt ist.
Klicke ich auf die Taskleiste - Desktop, so erscheint die Ordnerliste nicht mehr. Nach einem Neustart funktioniert es eine Weile, bis das gleiche Problem auftritt.
Hallo,
unter Windows 8 / 64 habe ich in den Taskleisteneigenschaften eingestellt:
(x) Taskleiste automatisch ausblenden
Es gibt Programme, die die Taskleiste auf den Bildschirm zaubern und ein blinkendes Icon signalisiert, welches Programm das ist.
Teilweise blinkt kein Icon.
Wie kann ich mit AutoIt / API Mitteln herausfinden, welches Programm die Taskleiste im Vordergrund hält, obwohl sie ausgeblendet sein soll?
selbst wenn man die bereinigte URL in den Bookmarks hat und aufruft, werden die Paramter wieder angehangen
Vielen Dank für den Hinweis. Ich habe das für eine Reihe von URLs ausprobiert, notiert, per Hand getestet und es funktioniert sehr gut.
In der Praxis sind die korrekten Parameter für die jeweilige Domain in AutoIt gespeichert. AutoIt ersetzt damit automatisch bei jedem Aufruf einer URL für die jeweilige Domain die URL in der Chrome URL Zeile. Das soll im Hintergrund geschehen.
Beispiel: eine Internetseite listet Freeware Programme auf. Öffne ich einen Link auf dieser Seite, erscheint die Freeware Seite mit einem Referer auf die vorhergehende Seite "?=komme von Domain xyz.com", die die Programme aufgelistet hat. Das ist ein Parameter, der beim späteren erneuten Öffnen der URL (z.B. aus bereinigten Bookmarks heraus) nicht automatisch gesetzt wird (gesetzt werden kann). Es gibt viele Internetseiten, die solche und andere Parameter in die URL-Zeile setzen. Diese möchte ich – soweit möglich – für ausgewählte Domains abtrennen.
Dafür suche ich eine Lösung, die ich mit AutoIt umsetzen kann. Die eigentliche Hürde scheint der Zugriff auf die URL-Zeile in Chrome zu sein, ohne über die Zwischenablage gehen zu müssen.
_get_chrome_url()
Veränderungen in AutoIt
_set_chrome_url()
Wenn du uns aber verrätst auf welcher Seite du was zu machen versucht können wir dir vielleicht einen Weg ohne Browser aufzeigen, dieser wäre wesentlich eleganter.
Ich habe im englischen Forum die Chrome UDF überflogen und mit jeder weiteren Version von Chrome scheint sie weniger zu funktionieren – wenn ich die richtige Seite erwischt habe, ist sie aus dem Jahr 2013.
Ich versuche, mein Ziel genauer zu beschreiben.
Viele URLs haben nach dem Aufruf in jedem Browser diverse Parameter im Schlepptau. Von diesen Parametern sind die wenigsten sinnvoll bzw. notwendig für den Aufruf der Seite. Sie dienen lediglich dem Tracking oder anderen Maßnahmen.
Diese URLs möchte ich, bevor ich sie zum Beispiel als Lesezeichen speichere, so bereinigen, dass sämtliche Parameter, die für die jeweilige Domain nicht notwendig sind, aus der URL Zeile gelöscht werden.
Die Seite wird dann aktualisiert – mit der neuen URL und kann so zum Beispiel als Lesezeichen gespeichert werden. Als Browser verwende ich Chrome / Windows.
Danke Alpines, ich lese mich ein.