ov3rclock3d
Goto Top

In .txt nach einem, teils bekannten Ausdruck suchen und als Variable setzen

Hallo erstmal, bin neu hier und habe sogleich schon eine Frage, die mich bereits lange Zeit verfolgt.
Ich hoffe, dass ihr mir helfen koennt..

Ich habe eine test.txt Datei mit variierendem Inhalt. Irgendwo in dieser test.txt ist ein Ausruck "btp=XXXXXXX" ohne ", wobei die Xe Platzhalter sind, da der Wert, der fuer btp steht auch variiert. Nun wuerde ich gerne den kompletten Ausdruck als Variable haben. Nach dem "btp=" folgen noch genau 7 Stellen, das ist sicher, jedoch ändert sich die Position des Ausdrucks in der test.txt und ist mir somit unbekannt. Ich hoffe, ihr versteht mein Problem. Bitte bitte, helft mir (-:

Content-Key: 103045

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

Printed on: April 25, 2024 at 20:04 o'clock

Member: Silentd
Silentd Dec 01, 2008 at 14:11:22 (UTC)
Goto Top
Mit der Wildcard "btp=*" würde es unter anderem funktionieren. Ohne die ""
Member: ov3rclock3d
ov3rclock3d Dec 01, 2008 at 14:21:50 (UTC)
Goto Top
Oh tut mir Leid, ich hab' vergessen zu erwaehnen, dass der Ausdruck nicht alleine dasteht. zB "abcbtp=1234567xyz
Der Platzhalter * würde dann ja für 1234567xyz stehen oder hab' ich das falsch verstanden? Ich brauche aber das btp=1234567 alleine.
Member: bastla
bastla Dec 01, 2008 at 15:26:07 (UTC)
Goto Top
Hallo ov3rclock3d und willkommen im Forum!

Da sich offensichtlich der gesuchte String mitten im Text (und nicht alleine in einer Zeile) befindet, macht das nur mit Batch nicht wirklich Spaß - daher ein Batch mit einem Stück (integriertem) VBScript:
@echo off & setlocal
set "Datei=D:\test.txt"  
set "Suche=btp="  
set Stellen=11

set G=%temp%\GetString.vbs
>%G%  echo T=CreateObject("Scripting.FileSystemObject").OpenTextFile(WScript.Arguments(0)).ReadAll  
>>%G% echo P=InStr(T,"%Suche%"):If P^>0 Then WScript.Echo Mid(T,P,%Stellen%)  
set "Wert=nicht gefunden"  
for /f "delims=" %%i in ('cscript %G% "%Datei%"') do set "Wert=%%i"  
echo %Wert%
Da nach dem Suchbegriff noch genau 7 Stellen folgen, sind insgesamt 11 Stellen auszulesen - deswegen die Zuweisung in Zeile 4.

Zu beachten wäre noch, dass in dieser Fassung Groß-/Kleinschreibung beachtet und daher zB "Btp=" nicht gefunden wird ...

Grüße
bastla
Member: ov3rclock3d
ov3rclock3d Dec 01, 2008 at 19:15:21 (UTC)
Goto Top
Danke bastla!
Fuer mich ziemlich kompliziert, da auch noch VBScript dazu kommt aber ich kann mir die Funktionen teils denken, super danke, funktioniert ohne Probleme! face-smile
Member: bastla
bastla Dec 01, 2008 at 19:31:00 (UTC)
Goto Top
Hallo ov3rclock3d!

Das VBScript ist ja halb so wild face-wink:
T=CreateObject("Scripting.FileSystemObject").OpenTextFile(WScript.Arguments(0)).ReadAll
Damit wird der gesamte Inhalt der an das Script übergebenen Datei ("WScript.Arguments(0)") in eine Text-Variable eingelesen - es entsteht also eine einzige Zeichenkette.

P=InStr(T,"%Suche%")
Innerhalb dieser Zeichenkette wird die Zeichenposition, an welcher der Suchbegriff (direkt aus dem Batch übernommen) zum ersten Mal gefunden wird, ermittelt.

If P>0 Then WScript.Echo Mid(T,P,%Stellen%)
Nur, wenn diese Position größer als Null ist, wurde der gesuchte Text tatsächlich gefunden - dann kann aber auch, beginnend an dieser Position, ein Teil, dessen Länge durch die Stellenanzahl (ebenfalls vom Batch geliefert) festgelegt wird, ausgegeben werden.

Diese Ausgabe - so es denn eine gibt (auch die Möglichkeit "nicht gefunden" muss ja berücksichtigt werden) - wird in der "for"-Schleife schließlich der Batchvariablen %Wert% zugewiesen. Finito. face-wink
Der Batch selbst ist ja nur ein Rahmen für das Script - dass er es auch selbst erzeugt, hat den Vorteil, nur eine einzige Datei "verwalten" zu müssen.

Grüße
bastla