2017-04-25 4 views
-3

Ich möchte in der Lage sein, eine Textdatei in Windows nach einem Stich ("A R") zu suchen und jede Instanz der Zeichenfolge sowie die vorherigen 17 Zeichen zurückzugeben. Die Zeichen enthalten Zahlen, Bindestriche und Schrägstriche. Unglücklicherweise sind die Strings, nach denen ich suche, in einem Chaos von Informationen enthalten, daher ist es nicht wirklich eine Option, einfach jede Zeile zurückzugeben, auf der "A R" gefunden wird.Sub-String suchen und zurückgeben plus vorherige 17 Zeichen

Ich habe versucht, eine Möglichkeit zu finden, FINDSTR in CMD einfach zu verwenden und die Ausgabe in eine results.txt umzuleiten, aber die FINDSTR lässt mich nicht so viele Zeichen passieren (siehe unten).

findstr /r /c:"[0-Z][0-Z][0-Z][0-Z][0-Z][0-Z][0-Z][0-Z][0-Z][0-Z][0-Z][0-Z][0-Z][0-Z][0-Z][0-Z][0-Z]A R" CombineXML.txt >results.txt

Die Ergebnisse sollten wie etwas aussehen:

05-24-00-212-805-AR

25-23-00-300-801-AR

79 -33-03-400-801-AR

Ich habe nur Zugang zu NetBeans (nicht sehr erfahren in Java), VBA und Windows Batch Scripting (Firmencomputer = keine Admin-Rechte, n o Python, kein Visual Studio ... grrr).

Ich habe eine Woche lang mein Gehirn zerrupft, um das herauszufinden.

Irgendwelche Ideen?

+0

Welche Version von Windows verwenden Sie? Ist Windows 7 oder höher PowerShell oder VBScript/JScript blockiert? –

+0

'findstr' ist nicht in der Lage, aus einer Zeichenfolge zu extrahieren, Sie geben nur eine Suchzeichenfolge (mit sehr eingeschränkter REGEX-Unterstützung) und immer die gesamte Zeile zurück. – Stephan

+1

In VBA können Sie einen Verweis auf "Microsoft VBScript Regular Expressions 5.5" hinzufügen? Wenn ja, können Sie es in VBA tun. Natürlich können Sie VBScript selbst verwenden, wenn Sie Zugriff darauf haben. Es ist ähnlich wie VBA. –

Antwort

1

findstr ist sehr begrenzt in seiner Fähigkeit, so dass es hier nutzlos ist. Aber es gibt ein großartiges Werkzeug jrepl, um alle Arten von REGEX-Suchen und Ersetzen zu tun. Die folgende Zeile sollte tun, was Sie wollen:

type CombineXML.txt |JREPL.BAT "(.{17}A R)" "$1" /match >results.txt 
+0

Die Klammern werden nicht in der Suchzeichenfolge benötigt, und die Ersetzungszeichenfolge wird ignoriert, wenn/MATCH verwendet wird. Ich bevorzuge/F InputFile/O OutputFile anstelle von Pipe und Umleitung. Also ist ein einfacherer alternativer Befehl 'jrepl '. {17} A R" ""/match/f CombineXML.txt/o results.txt'. Verwenden Sie CALL JREPL, wenn Sie den Befehl in ein Stapelscript ohne PPE eingeben. – dbenham