You are absolutely right Patrick, and I wouldn't expect anything less than a
working implementation from you now that you brought it up ;-)
Best regards
Johnny Nielsen
' ########################Anfang#############
Option Explicit
On Error Resume Next
Dim LineArray, args, fso, filename, stringtofind, linevar, searchstring,
CaseIgnore, Invert
Dim counter, openfile, line, Matches, Count, nolines, lines
CaseIgnore = FALSE
Invert = 0
Count=1
nolines=0
counter=0
lines=0
' Liest die auf Kommandoebene eigegebenen Parameter ein
Set args=WScript.Arguments
if args.count < 2 Then Call DisplayError(1)
' Wenn die korrekte Anzahl Parameter übergeben wurde, beginne mit der
Ausführung jeglicher welcher
if args.count > 2 Then Call GetOptions(args.count)
filename = args(0)
stringtofind = args(1)
' Erstelle das File System Object unnd öffne die Datei(en) die angegeben
wurde.
' Wenn die Datei nicht existiert, Fehler und wech
set fso = CreateObject("Scripting.FileSystemObject")
Set openfile = fso.OpenTextFile(filename, 1)
if err.number <> 0 then call DisplayError(2)
' Zeilen einlesen bis zum Ende der Datei
Do until openfile.AtEndOfStream = True
line = openfile.readline
counter=counter+1
' Je nachdem welche Schalter übegebn wurden, werden verschiedene Aktionen
getätigt
Select Case count
case 1
If lines=0 then
if ((Finder(line, stringtofind, CaseIgnore)) XOR invert) <> 0
then WScript.Echo(line)'WScript.Echo(line)
Else if ((Finder(line, stringtofind, CaseIgnore)) XOR invert)
<> 0 then WScript.Echo(counter&": "&line)
End If
Case 0
if ((Finder(line, stringtofind, CaseIgnore)) XOR invert) <> 0 then
nolines=nolines+1
End Select
Loop
' Zeige Ergebnisse
If (count=0 AND invert=0) then Wscript.Echo("Anzahl der Zeilen, welche den
String enthalten: " & nolines)
If (count=0 AND invert=1) then Wscript.Echo("Anzahl der Zeilen, welche den
String nicht enthalten: " & nolines)
Function Finder(linevar, searchstring, ignore)
' Suche kann "case sensitive" sein oder aber auch nicht
Dim grep
Set grep = New RegExp
grep.pattern = searchstring
grep.IgnoreCase=Ignore
Set Matches = grep.Execute(linevar)
If Matches.Count=0 Then
Finder=0
Exit Function
Else
Finder=1
End If
End Function
Sub DisplayError(ByVal errornumber)
' Zeigt Fehlermeldungen, je nachdem welche Werte der Funktion übergeben
wurden
Dim UsageMessage
Select Case errornumber
Case 1
UsageMessage = "Usage: cscript grepper.vbs <filename> <String to
Find> [ignore] [invert] [count] [lines]" & vbcrlf
UsageMessage = UsageMessage & "Ignore: Ignoriert Gross- und
Kleinschreibung" & VBCRLF
UsageMessage = UsageMessage & "Invert: Listet die Zeilen, die den
Suchstring nicht enthalten" & VBCRLF
UsageMessage = UsageMessage & "Count: Zeigt die Zeilen an, die den
String enthalten" & VBCRLF
UsageMessage = UsageMessage & "Lines: Zeigt die Zeilennummer des
Treffers" & VBCRLF & VBCRLF
UsageMessage = UsageMessage & "Windows 2000 können dieses Skript
auf der Kommandozeile ausführen"
Wscript.Echo UsageMessage
WScript.Quit
Case 2
WScript.Echo "Ungültiger Dateiname - Immer den ganzen Pfad
angeben"
WScript.Quit
Case Else
Wscript.Echo "Unerwarteter Fehler - Abbruch (Sollte eigentlich
nicht passieren)"
WScript.Quit
End Select
End Sub
Sub GetOptions(TotalArgs)
' Holt die Kommandozeilen Argumente und setzt die globalen Variablen
Dim CountArgs, ArgValue
CountArgs = 2
Do While CountArgs < TotalArgs
ArgValue = LCase(args(CountArgs))
Select Case ArgValue
Case "ignore" CaseIgnore = TRUE
Case "invert" Invert = 1
Case "count" Count=0
Case "lines" lines=1
Case Else CaseIgnore = TRUE
Invert = 0
End Select
CountArgs = CountArgs + 1
Loop
End Sub
' #####################Ende#################
CU
C
"Patrick" <pla...@freeshell.org> schrieb im Newsbeitrag