Mehrfachzeichenfolge mit ''('' im Suchbegriff
Moderators: Hacker, Stefan2, white
Mehrfachzeichenfolge mit ''('' im Suchbegriff
Ich möchte eine ganze Latte von Zeichenfolgen suchen lassen. Die Zeichenfolge fängt an mit CHAR(. Danach kommt ein Feldname, z.B. CHAR(KONTONR. Die Suche soll in txt-Dateien erfolgen. Wenn ich im Feld „Text suchen“ char(kontonr vorgebe, wird die Zeichenfolge gefunden. Ich habe gesehen, dass man auch mehre Zeichenfolgen suchen lassen kann, die mit | getrennt sind und man „Reg.Ausdruck (RegEx 2)“ angekreuzt hat. Die Mehrzeichenfolgesuche klappt aber leider nicht mit CHAR(. Es soll aber gerade CHAR(Feld gesucht werden. Kann man nun bei der Reg.-Ausdruck-Suche auch etwas eingeben, dass trotzdem nach CHAR( mehrfach gesucht werden kann? Wie viele Zeichenfolgen kann man auf einmal suchen lassen) Es müssen nämlich in den Textdateien 1951 Begriffe gesucht werden.
Suche tausende Begriffe mit Regular Expressions
Hallo Dom, willkommen!
Wenn du die RegEx Syntax verwenden möchtest,
dann musst du diese auch erst mal erlernen.
Das "(" hat in RegEx eine besondere Bedeutung.
Um nach einen "(" zu suchen, musst du es mittels eines Backslash "escapen".
Verwende deshalb ein "\(" anstelle eines einfachen "(".
Wenn du innerhalb der Suchfunktion die F1-Taste drückst, bekommst du weitere Hilfe.
- - -
Wenn du nach SO vielen Begriffen gleichzeitig? suchen lassen möchtest, verwende besser ein Skript oder ein spezialisiertes Programm.
Es kommt halt immer darauf an, was du erreichen möchtest?
Wenn du die RegEx Syntax verwenden möchtest,
dann musst du diese auch erst mal erlernen.
Das "(" hat in RegEx eine besondere Bedeutung.
Um nach einen "(" zu suchen, musst du es mittels eines Backslash "escapen".
Verwende deshalb ein "\(" anstelle eines einfachen "(".
Wenn du innerhalb der Suchfunktion die F1-Taste drückst, bekommst du weitere Hilfe.
- - -
Wenn du nach SO vielen Begriffen gleichzeitig? suchen lassen möchtest, verwende besser ein Skript oder ein spezialisiertes Programm.
Es kommt halt immer darauf an, was du erreichen möchtest?
Hallo Stefan2,
der Tipp mit dem Backslash war schon mal super. Die Suche CHAR\(KONTONR|CHAR\(KONTO_RAHMEN klappt jetzt. Könntest du mir auch mit dem Script behilflich sein? Im Moment habe ich die Suchbegriffe in einer Excel-Datei. Im Ergebnis sollen in mehrere Textdateien in einem Verzeichnis die 1951 Zeichenfolgen gesucht werden. Am besten lasse ich dann alle Begriffe auf einmal in allen Dateien suchen.
der Tipp mit dem Backslash war schon mal super. Die Suche CHAR\(KONTONR|CHAR\(KONTO_RAHMEN klappt jetzt. Könntest du mir auch mit dem Script behilflich sein? Im Moment habe ich die Suchbegriffe in einer Excel-Datei. Im Ergebnis sollen in mehrere Textdateien in einem Verzeichnis die 1951 Zeichenfolgen gesucht werden. Am besten lasse ich dann alle Begriffe auf einmal in allen Dateien suchen.
Stefan2 wrote:Es kommt halt immer darauf an, was du erreichen möchtest?
Und weiter...?DomRapper wrote:Im Ergebnis sollen in mehrere Textdateien in einem Verzeichnis die 1951 Zeichenfolgen gesucht werden.
Was soll mit den Fundstellen / den gefundenen Dateien gemacht werden?
Soll / Muss in TC weiterverarbeitet werden? Oder kann alles auch extern (über ein Script) erledigt werden?
Bitte poste einen möglichst genauen gewünschten work flow,
gerne mit Details wie Dateigrößen und Beispiel Dateiinhalt....
Es gibt sooo viele Möglichkeiten.
Mal davon abgesehen, dass ein Suchvorgang bei knapp 2000 Suchbegriffen vermutlich sehr lange dauert, wüsste ich nicht, wie man sowas sinnvoll in ein Skript gießen sollte.
Ich halte es außerdem für sehr sehr sehr unwahrscheinlich, dass man die Suchbegriffe nicht vereinfachen und auf wenige reduzieren kann. Dafür bieten such reguläre Ausdrücke an. Oder man kommt ohne RegEx aus und schließt im Gegenzug ein paar Suchbegriffe aus, die nicht gefunden werden sollen.
Und ich stimme Stefan2 zu: Es ist wichtig, was mit den gefundenen Dateien angestellt werden soll, denn für den Fall, dass es nur um ein Search&Replace geht, gibt deutlich einfachere Möglichkeiten (z.B. grep & sed, auch wenn die nicht gerade komfortabel sind).
MfG Dalai
Ich halte es außerdem für sehr sehr sehr unwahrscheinlich, dass man die Suchbegriffe nicht vereinfachen und auf wenige reduzieren kann. Dafür bieten such reguläre Ausdrücke an. Oder man kommt ohne RegEx aus und schließt im Gegenzug ein paar Suchbegriffe aus, die nicht gefunden werden sollen.
Und ich stimme Stefan2 zu: Es ist wichtig, was mit den gefundenen Dateien angestellt werden soll, denn für den Fall, dass es nur um ein Search&Replace geht, gibt deutlich einfachere Möglichkeiten (z.B. grep & sed, auch wenn die nicht gerade komfortabel sind).
MfG Dalai
#101164 Personal licence
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64
Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64
Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
Es sollen in knapp 200 txt-Dateien die knapp 200 Zeichenfolgen gesucht werden. Wenn in einer Textdatei eine oder mehrere der Zeichenfolgen gefunden wird, reicht die Anzeige von dem Dateinamen der txt-Datei vollkommen aus. Dalei hat auch recht. Es gibt z.B. Felder, die BIL_WERT 1, BIL_Wert2 usw. bis 10 heissen. Hier würde es natürlich ausreichen wenn CHAR(BIL_WERT gesucht wird.
Packe alle Suchbegriffe in eine Datei, ein Begriff pro Zeile. Lad dir grep für Windows herunter (inkl. der Dependencies), entpacke es in ein Verzeichnis deiner Wahl (inkl. Dependencies). Starte eine CMD und wechsle in das Verzeichnis mit den Dateien, die durchsucht werden sollen.DomRapper wrote:Wenn in einer Textdatei eine oder mehrere der Zeichenfolgen gefunden wird, reicht die Anzeige von dem Dateinamen der txt-Datei vollkommen aus.
Benutze dann folgende Kommandozeile:
Code: Select all
grep -R --file=<Datei_mit_Suchbegriffen> *.*
Code: Select all
findstr /G:<Datei_mit_Suchbegriffen> *.*
Code: Select all
grep -R --file=<Datei_mit_Suchbegriffen> *.* > Zieldatei_mit_gefundenen_Dateien.txt
#101164 Personal licence
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64
Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64
Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
Wenn du nicht auf Spezial-Suchprogramme setzen willst die (vielleicht) mit einer Liste von Suchbegriffen arbeiten
wäre die schon angesprochene Möglichkeit mit RegEx einen Versuch wert.
Das Vorgehen wäre:
1. sich aus allen(!) Suchbegriffen einen Ausdruck mit den schon angesprochenen | Operator zusammenbasteln, z.b. mit Suchen und Ersetzen
2. diesen Ausdruck anwenden
Aber:
Problem Nummer 1 ist: die Suchbegriffe selbst müssen vor der RegEx-Syntax geschützt werden.
Am besten wäre das verbreitete RegEx-Schema \Q...\E, nur leider unterstützt das TC's RegEx-Engine nicht.
Problem Nummer 2: Der Ausdruck kann sehr groß werden, was vermutlich auch an TC's Fähigkeiten scheitert,
allerdings kenne ich die aktuelle max. RegEx-Länge nicht.
Um das zu beheben müssen es nicht gleich Posix-Tools (grep, awk, sed) sein.
Ich könnte ich dir mein RegXtract-Plugin empfehlen.
Für Punkt 1: Hast du die Suchbegriffe in einer Textdatei, also im Klartext stehen?
Wenn ja wäre das Vorgehen einfach:
Angenommen die Begriffe stehen jeweils in einer neuen Zeile, also z.B.
Dann wende z.B. an:
RegEx:
Ersatz-Schema:
[x]Suchen und Ersetzen ankreuzen
Du müsstest danach lediglich das letzte Pipe-Symbol in der Ausgabedatei manuell weglöschen.
Punkt2:
Jetzt den Inhalt der Ausgabedatei kopieren und jetzt als RegEx anwenden, z.B. so:
RegEx:
Ersatz-Schema:
(Suchen und Ersetzen jetzt entfernen)
Du kannst auch den Zeilenmodus aktivieren und als Ersatzschema lediglich $0 nehmen, allerdings ist dieser dann auf jeweils eine Zeile bei der Suche beschränkt.
Wie ich das sehe bist du sowieso nur an den Dateien selbst interessiert, weswegen du $0 auch weglassen könntest,
allerdings gibt es dann vermutlich Mehrfach-Einträge, die du allerdings auch wiederum mit
Suchen und Ersetzen in einem dritten Durchgang ausfiltern könntest ("Keine Duplikate" ankreuzen)
PCRE ist in der aktuellen Konfiguration übrigens auch in der Länge beschränkt.
So wie ich das sehe auf knapp 30000 Zeichen im Unicode-Modus.
Bei 912 Zeichenfolgen mit Länge 12 sollte das aber ausreichen.
Edit: du kannst den erzeugten RegEx natürlich auch in PCREsearch anwenden,
dann hast du die Dateien direkt im TC-Fenster.
wäre die schon angesprochene Möglichkeit mit RegEx einen Versuch wert.
Das Vorgehen wäre:
1. sich aus allen(!) Suchbegriffen einen Ausdruck mit den schon angesprochenen | Operator zusammenbasteln, z.b. mit Suchen und Ersetzen
2. diesen Ausdruck anwenden
Aber:
Problem Nummer 1 ist: die Suchbegriffe selbst müssen vor der RegEx-Syntax geschützt werden.
Am besten wäre das verbreitete RegEx-Schema \Q...\E, nur leider unterstützt das TC's RegEx-Engine nicht.
Problem Nummer 2: Der Ausdruck kann sehr groß werden, was vermutlich auch an TC's Fähigkeiten scheitert,
allerdings kenne ich die aktuelle max. RegEx-Länge nicht.
Um das zu beheben müssen es nicht gleich Posix-Tools (grep, awk, sed) sein.
Ich könnte ich dir mein RegXtract-Plugin empfehlen.
Für Punkt 1: Hast du die Suchbegriffe in einer Textdatei, also im Klartext stehen?
Wenn ja wäre das Vorgehen einfach:
Angenommen die Begriffe stehen jeweils in einer neuen Zeile, also z.B.
Code: Select all
begriff1
begriff2
begriff99
RegEx:
Code: Select all
(.*)\R?
Code: Select all
\Q$1\E|
Du müsstest danach lediglich das letzte Pipe-Symbol in der Ausgabedatei manuell weglöschen.
Punkt2:
Jetzt den Inhalt der Ausgabedatei kopieren und jetzt als RegEx anwenden, z.B. so:
RegEx:
Code: Select all
<Ausgabe von eben>
Code: Select all
\xNN: $0
Du kannst auch den Zeilenmodus aktivieren und als Ersatzschema lediglich $0 nehmen, allerdings ist dieser dann auf jeweils eine Zeile bei der Suche beschränkt.
Wie ich das sehe bist du sowieso nur an den Dateien selbst interessiert, weswegen du $0 auch weglassen könntest,
allerdings gibt es dann vermutlich Mehrfach-Einträge, die du allerdings auch wiederum mit
Suchen und Ersetzen in einem dritten Durchgang ausfiltern könntest ("Keine Duplikate" ankreuzen)
PCRE ist in der aktuellen Konfiguration übrigens auch in der Länge beschränkt.
So wie ich das sehe auf knapp 30000 Zeichen im Unicode-Modus.
Bei 912 Zeichenfolgen mit Länge 12 sollte das aber ausreichen.
Edit: du kannst den erzeugten RegEx natürlich auch in PCREsearch anwenden,
dann hast du die Dateien direkt im TC-Fenster.
TC plugins: PCREsearch and RegXtract