deutsch73
Goto Top

Vbscript.regexp suche nach Variable

Hallo,

Das Script soll den Text

Datum
das ist ein Beispieltext

durchsuchen.
Wenn "das" gefunden wird sollen die nächsten 2 Wörter gegen den Inhalt der Variablen strDatum
ersetzt werden. Funktioniert soweit!
Ich benötige noch die Möglichkeit nicht nur nach "das" zu suchen sondern nach einem beliebigen Wort
des in der Variablen strPathFind steht ( z:B "ein") und danach die nächsten 2 Wörter gegen den Inhalt
strDatum austauscht.

Hier das Script:
Suchwort = Inputbox ("Datei eingeben")
If Suchwort = "123456" Then
strPathFind = "das"
Else
strPathFind = "ein"
End If
WScript.Echo strPathFind
strFile = datei
content = fso.OpenTextFile(strFile,1).ReadAll()
Set regex = CreateObject("vbscript.regexp")
regex.Global = True: regex.IgnoreCase = True
regex.Pattern = "(strPathFind) ,([^\s]+ [^\s]+)"
'regex.Pattern = "(das) ([^\s]+ [^\s]+)"
strDatum = InputBox("Datum eingeben:")
'fso.OpenTextFile(strFile,2).Write(regex.Replace(content,"$1 " & strDatum))

Content-Key: 305932

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

Printed on: April 26, 2024 at 22:04 o'clock

Mitglied: 129413
129413 Jun 01, 2016, updated at Jun 02, 2016 at 07:15:56 (UTC)
Goto Top
Hallo,

Das Script soll den Text
Ah ja ... Noch schöner gings wohl nicht ...face-sad
Nach dem Motto: Hallo, putz mir das Klo, aber pronto!

regex.Pattern = "(" & strPathFind & ") ([^\s]+ [^\s]+)"  
Gruß skybird

Hier gibts auch Formatierung im Forum
Member: deutsch73
deutsch73 Jun 01, 2016 at 22:21:02 (UTC)
Goto Top
Hallo,

für mich ist regexp neu und ich hätte da noch eine Frage:
Wenn ich das Komma in der Code Zeile drinnen lasse passiert nichts,
nehme ich es raus funktioniert es.

Wenn das gesuchte Wort ( strPathFind)
am Anfang der Zeile steht ist alles Ok
ist das Wort aber in der mitte wird nichts geändert woran liegt das?

regex.Pattern = "(" & strPathFind & ") ([^\s]+ [^\s]+)"  
Mitglied: 129413
Solution 129413 Jun 02, 2016 updated at 07:19:00 (UTC)
Goto Top
Das Komma hast du selber eingefügt, ich hab das nur übernommen ! Du musst schon wissen was du tust...

woran liegt das?
nicht an meinem Code, aber du postest ja noch nicht mal den Text um den es geht (aber bitte mit Codetags)

Außerdem beachte das beim Suchwort Sonderzeichen "escaped" werden müssen, das ist ein Regular Expression String. Also zieh dir bitte erst mal die Grundlagen dazu rein. Danke.
Member: deutsch73
deutsch73 Jun 03, 2016 at 15:52:02 (UTC)
Goto Top
der Text um den es sich handelt lautet:

Datum
das ist ein Beispieltext


einmal möchte ich nach <das> Suchen und danach 2 Wörter gegen den Inhalt von strDatum tauschen
und das andere mal nach <ein> und danach das eine Wort gegen den Inhalt von strDatum tauschen.

Der Text befindet sich einmal in File 123456.TTP und im File 123457.TTP
Hier das ganze Script

DIM  Start, Suchwort

Suchwort = (InputBox ("Scannen"))	  
	 Ordner = "C:\Users\deutsch\Desktop"  
 If Suchwort <= "" Then   
  WScript.Quit
  End If
	
' Aufruf der Hilfroutine  
  ListeOrdner Start, Suchwort
  
  ' Hilfsroutine: Rekursion über Ordnerinhalte  
	Function ListeOrdner(Ordner, Suchmaske)
	
	Dim FSO, Verzeichnis, datei, Unterverzeichnis, sh,strWorkDir, strText, strText2, strLine, strPathFind
	Dim objFSO, objWshNetwork, objFile, strreplace,regex,strDatum, strcontent,content, strfound,strFile, strfound1
	Dim type1, type2, type3, shell	
	
	Const ForReading = 1, ForWriting = 2, ForAppending = 8	
	
	Set FSO = CreateObject("Scripting.FileSystemObject")  
	Set Verzeichnis = FSO.GetFolder("C:\Users\deutsch\Desktop")  
	' Alle Dateien im Verzeichnis durchlaufen  
		For Each datei In Verzeichnis.Files	
		'Wenn Dateiname mit Suchwort übereinstimmt  
		If InStr(UCase(datei.Name), UCase(Suchmaske)) > 0 Then
		WScript.Echo datei
		
			If Suchwort = "123456" Then  
			strPathFind = "das"  
			Else
			strPathFind = "ein"                                                                        
			End If 

	strFile = datei
	content = fso.OpenTextFile(strFile,1).ReadAll()
	Set regex = CreateObject("vbscript.regexp")  
	regex.Global = True: regex.IgnoreCase = True
	regex.Pattern = "(" & strPathFind & ") ([^\s]+ [^\s]+)"  
	'regex.Pattern = "(das) ([^\s]+ [^\s]+)"  
	strDatum = InputBox("Datum eingeben:")  
	'fso.OpenTextFile(strFile,2).Write(regex.Replace(content,strPathFind & strDatum))  
	fso.OpenTextFile(strFile,2).Write(regex.Replace(content,"$1"& strDatum))    
	
	Set shell = CreateObject("Wscript.Shell")  
shell.Run datei
Else


	'	End If  
	End If
	Next
End Function
Member: deutsch73
deutsch73 Jun 03, 2016 at 18:40:47 (UTC)
Goto Top
So nach Studium der Regulären Ausdrücke bin ich draufgekommen wie es geht!
regex.Pattern = "(" &strPathFind& ") ([^\s$]+)"  

Das $ Zeichen am Schluss hat mir gefehlt .

Danke nochmal für die Unterstützung!

Sg
deutsch73