Ich muss die Anzahl der #define
Zeilen in C-Dateien (3 von ihnen) mit VBS zählen. Bitte schlagen Sie den besten Weg vor, dies zu erreichen.Zählen Sie die Anzahl der #defines in einer .c-Datei mit VBS
Antwort
Wie wäre es mit so etwas? Pass nur die Dateien in als Argumente
Const token = "#define"
Set objArgs = WScript.Arguments
tokenCount = 0
Set fso = CreateObject("Scripting.FileSystemObject")
For i = 0 To objArgs.Count - 1
Set objFile = fso.OpenTextFile(objArgs(i), 1)
Do Until objFile.AtEndofStream
lineCount = lineCount + 1
If InStr(1, objFile.ReadLine, token, 1) 0 Then
tokenCount = tokenCount + 1
End If
Loop
Next
WScript.echo tokenCount
Diese Leerzeichen zwischen # ignorieren und definieren
Const token = "#define"
Set objArgs = WScript.Arguments
tokenCount = 0
Set fso = CreateObject("Scripting.FileSystemObject")
For i = 0 To objArgs.Count - 1
Set objFile = fso.OpenTextFile(objArgs(i), 1)
Do Until objFile.AtEndofStream
lineCount = lineCount + 1
If InStr(1, Replace(objFile.ReadLine, " ", "", 1, -1, 1), token, 1) 0 Then
tokenCount = tokenCount + 1
End If
Loop
Next
WScript.echo tokenCount
Beachten Sie, dass die Token '#' und 'define' durch eine beliebige Anzahl von Leerzeichen getrennt sein können! '# define' ist immer noch ein gültiges Define-Makro und wird von Ihrem Code nicht gefunden. –
Dieser Code sollte alle # define-Anweisungen in einer beliebigen Anzahl von Eingabedateien zählen. In den Anweisungen wurden Vorkehrungen für Leerzeichen getroffen, z. B. "# definieren" oder "# definieren", die beide gültige Anweisungen sind.
HINWEIS: Ich zähle nicht für die # auf einer Zeile und die "definieren" auf der nächsten, ich nehme an, die # und "definieren" sind mindestens in der gleichen Zeile, obwohl Sie dies durch Lesen könnten die gesamte Datei und entfernen Sie alle Leerzeichen, dann speichern Sie in eine Variable oder temporäre Datei oder so ähnlich und verwenden Sie das als Ihre Eingabe.
Sie den Code ein Bündel von einem Graben umgeben, die Dateizugriffskonstanten verkürzen kann und was nicht, sonst wird es Ihnen Ausgabe wie folgt geben:
There are: 9 define statements in the source: c:\define.txt
There are: 11 define statements in the source: c:\define2.txt
There are: 10 define statements in the source: c:\define3.txt
Die Kommandozeile wäre: cscript scriptname.vbs c: \ define.txt c: \ define3.txt etc ...
' Define constants for file access
Const TristateFalse = 0
Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objArgs = WScript.Arguments
If objArgs.Count > 0 then
For i = 0 To objArgs.Count - 1
Set objFileInputStream = objFSO.OpenTextFile(objArgs(i), ForReading, False, TristateFalse)
intTempCount = 0
tokenCount = 0
Do while not objFileInputStream.AtEndOfStream
strLine = replace(ucase(objFileInputStream.ReadLine), " ", "")
intLineLength = len(strLine)
Do
If instr(strLine, "#DEFINE") <> 0 then
tokenCount = tokenCount + 1
strLine = replace(strLine, "#DEFINE","", 1, 1)
intTempCount = intTempCount + 1
else
exit do
End If
Loop until intTempCount = intLineLength
Loop
objFileInputStream.Close
wscript.echo "There are: " & tokenCount & " define statements in the source: " & objArgs(i)
Next
Else
wscript.echo "You must enter at least one filename."
End If
ich bin nicht so bei VB-Skript gut, aber so etwas wie ...
Dim re as New RegExp
re.IgnoreCase = True
re.Global = True
re.Pattern = "#define"
Set mc = re.Execute(yourFileText)
ans = mc.Count
Das folgende Skript verwendet einen regulären Ausdruck, um die #define
Anweisungen zu zählen, die am Anfang der Zeilen angezeigt werden. Whitespace ist vor der Anweisung zulässig sowie zwischen und define
. Die Liste der Dateien sollte die Suche in übergeben als Argumente, wie zB:
cscript.exe script_name.vbs c:\myfile1.c c:\myfile2.c
Hier ist der Script-Code:
Const ForReading = 1
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set re = New RegExp
re.Pattern = "^\s*#\s*define\b"
re.IgnoreCase = False
re.Global = True
re.Multiline = True
strReport = ""
For Each strFileName in WScript.Arguments.Unnamed
Set oFile = oFSO.OpenTextFile(strFileName, ForReading)
strText = oFile.ReadAll
oFile.Close
intCount = re.Execute(strText).Count
strReport = strReport & "There are " & intCount & " #define statement(s) in " & strFileName & vbNewLine
Next
WScript.Echo strReport
Die Skript-Ausgabe ist wie:
There are 7 #define statement(s) in c:\myfile1.c
There are 0 #define statement(s) in c:\myfile2.c
- 1. Zählen Sie die Anzahl der Optionen in einer Liste
- 2. Zählen Sie die Anzahl der "Löcher" in einer Bitmap
- 3. zählen Sie die Anzahl der Wörterbücher in einer Zeichenfolge Python
- 4. zählen die Anzahl der Anrufe einer Klausel
- 5. Mit Jquery die Anzahl der Elemente zählen?
- 6. Anzahl der Bilder in einer Zeichenfolge zählen
- 7. Zählen der Anzahl der Zeilen in einer Tabelle mit mysql
- 8. Zählen Sie die Anzahl der Zeilen in jeder Gruppe
- 9. zählen Sie die Anzahl der Auswahlen in einem Mehrfachauswahlfeld
- 10. Zählen Sie die Anzahl der Etiketten in ClearCase
- 11. Zählen Sie die Anzahl der Nullen in jeder Spalte
- 12. Anzahl der Zeichenfolgenvorkommen zählen
- 13. Zählen Sie die Anzahl der Elemente in meiner Array-Liste
- 14. So zählen Sie die Anzahl der verpassten Anrufe in Android
- 15. zählen Sie die Anzahl der Züge in einem BST Java
- 16. Zählen Sie die Anzahl der Objekte in JSON-Array
- 17. Zählen Sie die Anzahl der Daten aus der Tabelle
- 18. Zählen Sie die Vokale in einer Zeichenfolge
- 19. php/mysql Zählen der Anzahl der Elemente mit einer Bedingung
- 20. Zählen Sie die Anzahl der Duplikate für eine Spalte
- 21. Zählen Sie die Anzahl der variablen Kombinationen in einer Log-Datei mit Perl
- 22. foldl Mit Anzahl der wahren Werte zählen
- 23. Zählen Sie die Anzahl der Male (Frequenz) eine Zeichenfolge auftritt
- 24. Zählen der Anzahl der Vorkommen jedes Elements in einer Liste
- 25. Die Anzahl der Elemente im Array zählen
- 26. Zählen der Anzahl der Zeichen in einer Zeichenfolge
- 27. Zählen Sie die Anzahl der Vorkommen jedes Wortes
- 28. Zählen der Anzahl der Punkte in einer Zeichenfolge
- 29. Zählen der Anzahl der Zeilen in einer Textdatei
- 30. Zählen der Anzahl der Funktionsaufrufe in einer ausführbaren Datei
Eine Textdatei besteht aus einer Folge von Zeichen. Wenn Sie nicht definieren, wo eine "Zeichenfolge" endet und wo die nächste beginnt, ist die Antwort nur "1". Sie könnten eine Funktion erstellen, die nur 1 zurückgibt. –
hi daniel, Um die Frage klarer und besser zu machen.Ich möchte eine VBS-Skriptdatei schreiben, die die Anzahl der in a.c, b.c und d.c. vorhandenen #define-Zeichenfolgen zählt. – Maddy
Ich habe die Frage basierend darauf umgeschrieben. Bitte lassen Sie mich wissen, ob es korrekt ist. –