clownuser
Goto Top

Per Batch eine bestimmte Zeichenfolge auslesen

Guten Abend zusammen.

Ich habe sehr lange nach der Lösung zu meinem Problem gesucht. Dann bin ich au dieses Forum hier gestossen.
Folgendes:

Ich habe eine .txt Datei. Dort steh ganz viel wirres Zeug drin. Und immer wieder versteckt sich in diesem Wirrwar eine Zeichenfolge, die ich in eine Neue .txt Datei kopieren möchte.
Die Zeichenfolge hat immer 6 Zeichen (Zahlen und Buchstaben) und ist links und rechts mindestens von einem Leerschlag umgeben.
Es sollten nur diese Zeichenfolgen ausgelesen werden, die keine kleinen Buchstaben beinhalten. (Oder kann ich per Batch die kleinen Buchstaben zu grossen machen?)
In der neuen Datei sollten die Zeichenfolgen untereinander aufgelistet werden.

Beispiel:

Bestehende Datei:
o 6080.75s 135.00 0.00
o 6080.75s QW309P 0.00 0.00
o 61.75s 0.00 0.00
AK
v 0.00s 0.00 0.00
v 6152.50s 0.00 56HU7E 0.00
v 6152.50s 235.00 0.00
v 6095.75s 4561Z9 235.00 -15.00


Neue erstellte Datei:
QW309P
56HU7E
4561Z9


Kann mir jemand weiterhelfen?
Liebe Grüsse.
ClownUser

Content-Key: 150818

Url: https://administrator.de/contentid/150818

Printed on: April 19, 2024 at 10:04 o'clock

Member: bastla
bastla Sep 10, 2010 at 15:03:09 (UTC)
Goto Top
Hallo ClownUser und willkommen im Forum!

Dein Beispiel ist etwas widersprüchlich - wenn nur diese Zeichenfolgen ausgelesen werden, die keine grossen Buchstaben beinhalten, dürfte in der neu erstellten Datei eigentlich keine einzige Zeile stehen ...

Grüße
bastla
Member: ClownUser
ClownUser Sep 10, 2010 at 15:10:35 (UTC)
Goto Top
Hallo bastla.

Vielen Dank für deine schnelle Antwort.

Genau wie du sagtest. Ich habe natürlich einen Schreibfehler gemacht.
Die neue Datei sollte nur grosse Buchstaben.

lg
Member: bastla
bastla Sep 10, 2010 at 15:13:52 (UTC)
Goto Top
Hallo ClownUser!

String-Verarbeitung ist keine typische Stärke von Batch - daher würde ich hier zu VBS (oder einer Portierung von "sed") greifen - etwa:
Ein = "D:\Deine Datei.txt"  
Aus = "D:\Deine neue Datei.txt"  

Set fso = CreateObject("Scripting.FileSystemObject")  
T = fso.OpenTextFile(Ein).ReadAll

Set rE = New RegExp
rE.Global = True
rE.Pattern = "\b[A-Z0-9]{6}\b"  

Set A = fso.CreateTextFile(Aus)
Set Matches = rE.Execute(T)
For Each Match In Matches
    A.WriteLine Match
Next
A.Close
Die entscheidende Zeile 9 bedeutet: Suche alle Zeichenketten, die an einer "Wortgrenze" (inkludiert zB auch Zeilenschaltungen) beginnen ("\b"), danach aus dem Bereich "A-Z" sowie "0-9" genau 6 Zeichen enthalten und mit einer weiteren Wortgrenze enden; wolltest Du tatsächlich verlangen, dass die 6 Zeichen von je zumindest einem Leerzeichen begrenzt sind, wären die beiden "\b" durch Leerzeichen zu ersetzen. Ev weitere erlaubte Zeichen (zB Umlaute) könntest Du einfach zwischen den eckigen Klammern hinzufügen ...

Grüße
bastla
Member: ClownUser
ClownUser Sep 10, 2010 at 15:59:22 (UTC)
Goto Top
Nochmals danke für deine Antwort. Jetzt bin ich aber gerade überfordert. Ich kenne mich leider nur mit Batch Dateien ein Bisschen aus. VBA wüsste ich nicht einmal, was ich mit dem Code machen müsste, oder wie man so eine Datei ausführt...

soory..

Ist mein Vorhaben schwer erreichbar mit Batch?
Ist VBA leicht zu erlernen?

Lg
Member: bastla
bastla Sep 10, 2010 at 16:07:29 (UTC)
Goto Top
Hallo ClownUser!
Ist mein Vorhaben schwer erreichbar mit Batch?
Eher ja ...
Ist VBA leicht zu erlernen?
Kommt darauf an, wen Du fragst ... face-wink

Es geht hier aber um VBS (obwohl das auch über VBA funktionieren würde) - daher einfach das Script mit dem Dateityp ".vbs" (zB als "D:\HolMirDieStrings.vbs") speichern (falls Du den Windows-Editor "notepad" verwendest, darauf achten, dass als Dateityp beim Speichern "Alle Dateien" eingestellt ist, da ansonsten ein ".txt" angefügt wird) und per Doppelklick oder mit der Zeile
cscript //nologo D:\HolMirDieStrings.vbs
(es würde, da keine Meldungen ausgegeben werden, sogar
D:\HolMirDieStrings.vbs
genügen) aus einem Batch / von der Kommandozeile starten ...

Grüße
bastla
Member: ClownUser
ClownUser Sep 10, 2010 at 16:30:00 (UTC)
Goto Top
Ich hab das jetzt mit dem .vbs probiert.
Es funktioniert!
Du bist unglaublich!

Ignoriert dieses Script jetzt alle Zeichenfolgen mit kleinen Buchstaben, oder wandelt es die kleinen in grosse um?

Vielen vielen Dank für deine Hilfe.

lg
Member: bastla
bastla Sep 10, 2010 at 16:46:31 (UTC)
Goto Top
Hallo ClownUser!
Ignoriert dieses Script jetzt alle Zeichenfolgen mit kleinen Buchstaben, oder wandelt es die kleinen in grosse um?
Derzeit wird ignoriert - wenn umgewandelt werden soll, müssten die Zeile 9 auf
rE.Pattern = "\b[A-Za-z0-9]{6}\b" 
und die Zeile 14 auf
A.WriteLine UCase(Match)
geändert werden.

Grüße
bastla
Member: ClownUser
ClownUser Sep 11, 2010 at 08:45:21 (UTC)
Goto Top
Alles ganz genau so, wie ich wollte. Hätte nie gedacht, dass das machbar ist..
Noch eine kleine Frage:
Kann ich auch anstatt dem Verzeichnis und dem Dateinamen, eine URL angeben?
Oder sogar mehrere?
z.B. so:

...administrator.de/...&page=104
bis
...administrator.de/...&page=318
?


Liebe Grüsse


Edit: Habe gerade gemerkt, dass die URL's nicht ganz angezeigt werden.
Member: bastla
bastla Sep 11, 2010 at 11:57:53 (UTC)
Goto Top
Hallo ClownUser!

Das Script setzt eine vorhandene Textdatei voraus ...

Welchen Zweck hat denn die ganze Aktion?

Grüße
bastla