Mehrfachzeichenfolge mit ''('' im Suchbegriff

German support forum

Moderators: Hacker, Stefan2, white

Post Reply
DomRapper
Junior Member
Junior Member
Posts: 5
Joined: 2015-05-04, 13:55 UTC
Location: Germany

Mehrfachzeichenfolge mit ''('' im Suchbegriff

Post by *DomRapper »

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.
User avatar
Stefan2
Power Member
Power Member
Posts: 4281
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Suche tausende Begriffe mit Regular Expressions

Post by *Stefan2 »

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?

 
DomRapper
Junior Member
Junior Member
Posts: 5
Joined: 2015-05-04, 13:55 UTC
Location: Germany

Post by *DomRapper »

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.
User avatar
Stefan2
Power Member
Power Member
Posts: 4281
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Post by *Stefan2 »

Stefan2 wrote:Es kommt halt immer darauf an, was du erreichen möchtest?
DomRapper wrote:Im Ergebnis sollen in mehrere Textdateien in einem Verzeichnis die 1951 Zeichenfolgen gesucht werden.
Und weiter...?

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.


 
User avatar
Dalai
Power Member
Power Member
Posts: 9974
Joined: 2005-01-28, 22:17 UTC
Location: Meiningen (Südthüringen)

Post by *Dalai »

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
#101164 Personal licence
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64

Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
DomRapper
Junior Member
Junior Member
Posts: 5
Joined: 2015-05-04, 13:55 UTC
Location: Germany

Post by *DomRapper »

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.
DomRapper
Junior Member
Junior Member
Posts: 5
Joined: 2015-05-04, 13:55 UTC
Location: Germany

Post by *DomRapper »

In den Textdateien sind SQL-Statements gespeichert und die die max. Dateigröße der txt-Datei beträgt 24.682 KB.
DomRapper
Junior Member
Junior Member
Posts: 5
Joined: 2015-05-04, 13:55 UTC
Location: Germany

Post by *DomRapper »

Ich habe die Zeichenfolge nun auf 12 Stellen begrenzt und muss nun nur noch nach 912 Zeichenfolgen suchen lassen. In der größten Datei sind 1.938 Wörter enthalten. Da ich die Suche am Arbeitsplatz machen werde, kann die Suche nebenbei laufen und die Dauer wäre mir dann egal.
User avatar
Dalai
Power Member
Power Member
Posts: 9974
Joined: 2005-01-28, 22:17 UTC
Location: Meiningen (Südthüringen)

Post by *Dalai »

DomRapper wrote:Wenn in einer Textdatei eine oder mehrere der Zeichenfolgen gefunden wird, reicht die Anzeige von dem Dateinamen der txt-Datei vollkommen aus.
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.

Benutze dann folgende Kommandozeile:

Code: Select all

grep -R --file=<Datei_mit_Suchbegriffen> *.*
Alternativ kann man wohl auch mit findstr arbeiten, das sogar - ich staune - ebenfalls Suchbegriffe aus einer Datei holen kann. Ob und wie gut das funzt, weiß ich aber nicht:

Code: Select all

findstr /G:<Datei_mit_Suchbegriffen> *.*
Sofern du die Liste der gefundenen Dateien in einer Datei haben willst, so leite die Ausgabe der obigen Befehle um, z.B. so:

Code: Select all

grep -R --file=<Datei_mit_Suchbegriffen> *.* > Zieldatei_mit_gefundenen_Dateien.txt
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
User avatar
milo1012
Power Member
Power Member
Posts: 1158
Joined: 2012-02-02, 19:23 UTC

Post by *milo1012 »

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.

Code: Select all

begriff1
begriff2
begriff99
Dann wende z.B. an:
RegEx:

Code: Select all

(.*)\R?
Ersatz-Schema:

Code: Select all

\Q$1\E|
[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:

Code: Select all

<Ausgabe von eben>
Ersatz-Schema:

Code: Select all

\xNN: $0
(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.
TC plugins: PCREsearch and RegXtract
Post Reply