http://dieseyer.de • all rights reserved • © 2011 v11.4

'v3.6*****************************************************
' File: StringInDatei.vbs
' Autor: dieseyer@gmx.de
' dieseyer.de
'
' Script sucht in einer Datei nach einer Zeichenkette und
' speichert jede Zeile, die diese Zeichenkette enthält, mit
' Zeilennummer in eine andere Datei.
'*********************************************************

Option Explicit ' Siehe http://dieseyer.de/dse-wsh-lernen.html#OptionExpl

Dim WSHShell, FSO, FileIn, FileOut
Dim EingDatei, Ausgdatei, ZKette, Zeile, Antwort, i

Set WSHShell = WScript.CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
EingDatei = "error.log"
AusgDatei = "fehler.log"
ZKette = "msgbox"

ZKette = InputBox ("Nach welcher Zeichenkette soll in einer Datei gesucht werden?", WScript.ScriptName, ZKette)
If ZKette = "" then
WSHShell.Popup (". . . denn eben nicht!"), 3, WScript.ScriptName, 64
WScript.Quit
End If

EingDatei = InputBox ("Welche Datei soll nach '" & ZKette & "' durchsucht werden?", WScript.ScriptName, EingDatei)
If EingDatei = "" then
WSHShell.Popup (". . . denn eben nicht!"), 3, WScript.ScriptName, 64
WScript.Quit
End If

if not fso.FileExists(EingDatei) Then
WSHShell.Popup (EingDatei & "existiert nicht. Zur Demo wird dieses Skript " & WScript.ScriptName & " nach " & EingDatei & " kopiert."), 3, WScript.ScriptName, 64
FSO.CopyFile WScript.ScriptName, EingDatei ' fals Datei nicht vorhanden, dieses Script nach error.log kopieren - zum Testen
End If

if not fso.FileExists(EingDatei) Then ' fals Datei nicht vorhanden
MsgBox "Datei " & EingDatei & " zum Einlesen fehlt.", , WScript.ScriptName
WScript.Quit
End If

AusgDatei = InputBox ("In welche Datei sollen die Zeilen mit der Zeichenkette" & vbCRLF & "'" & ZKette & "'" & vbCRLF & "gespeichert werden?", WScript.ScriptName, AusgDatei)
If AusgDatei = "" then
WSHShell.Popup (". . . denn eben nicht!"), 3, WScript.ScriptName, 64
WScript.Quit
End If

if fso.FileExists(AusgDatei) Then
Antwort = MsgBox (AusgDatei & " existiert bereits - soll sie gelöscht werden?", 4+32+256, WScript.ScriptName)
If Antwort = vbYes then fso.DeleteFile(AusgDatei), True
End If

Set FileIn = FSO.OpenTextFile(EingDatei, 1 ) ' Datei zum Lesen öffnen
Set FileOut = fso.OpenTextFile(AusgDatei, 8, true) ' Datei zum Erweitern öffnen (notfals anlegen)
fileOut.WriteLine( vbCRLF & now() & vbTab & "Zeichenkette '" & ZKette & "' gefunden in Zeile(n):")

i=0
Do While Not (FileIn.atEndOfStream) ' wenn Datei nicht zu ende ist, weiter machen
i = i + 1
Zeile = FileIn.Readline ' eine Zeile lesen
If InStrRev( UCase( Zeile), UCase( ZKette)) > 0 Then fileOut.WriteLine(i & vbTab & ":" & Zeile)
' InStrRev(..) sucht von hinten, ob Zeichenfolge vorhanden
' ist und gibt die Position des ersten Auftretens zurück -
' wenn die Positon größer als 1, wird die Zeile in die
' Ausgabedatei geschrieben
' If InStr(TextU, ZKette) > 0 Then fileOut.WriteLine(i & vbTab & TextU)
' InStr(..) sucht von vorn, . . .
Loop

FileIn.Close
Set FileIn = Nothing ' Datei schließen
FileOunt.Close
Set FileOut = Nothing ' Datei schließen

WSHShell.Run AusgDatei
' WSHShell.Run "Notepad.exe " & AusgDatei

http://dieseyer.de • all rights reserved • © 2011 v11.4