je dois compter le nombre de lignes dans les fichiers #define
C (3 d'entre eux) à l'aide VBS. S'il vous plaît, suggérez la meilleure façon d'accomplir ceci.Comptez le nombre de #defines dans un fichier .c VBS
Répondre
Que diriez-vous quelque chose comme ça? juste passer les fichiers comme arguments
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
Cela ne tient pas compte des espaces vides entre # et définir
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
Notez que les jetons '#' et 'define' peuvent être séparés par un nombre arbitraire d'espaces! '# define' est toujours une macro de définition valide et n'est pas trouvée par votre code. –
Ce code doit compter tous les #define de tout nombre de fichiers d'entrée. Des dispositions ont été prises pour les espaces dans les instructions, telles que "# define" ou "# define" qui sont toutes les deux des instructions valides.
NOTE: Je ne compte pas pour le # sur une ligne et le "définir" sur le suivant, je suppose que le # et "définir" sont au moins sur la même ligne, bien que vous puissiez le faire en lisant l'ensemble du fichier et en supprimant tous les espaces, puis enregistrer dans un fichier variable ou temporaire ou quelque chose comme ça et l'utiliser comme votre entrée.
Vous pouvez raccourcir le code d'un groupe en abandonnant les constantes d'accès aux fichiers et ce pas, sinon il vous donnera la sortie comme ceci:
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
La ligne de commande serait: 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
Je ne suis pas bon au script VB, mais quelque chose comme ...
Dim re as New RegExp
re.IgnoreCase = True
re.Global = True
re.Pattern = "#define"
Set mc = re.Execute(yourFileText)
ans = mc.Count
Le script ci-dessous utilise une expression régulière pour compter les instructions #define
qui apparaissent au début des lignes. Les espaces sont autorisés avant l'instruction ainsi qu'entre #
et define
. La liste des fichiers à rechercher dans doit être transmis comme arguments, par exemple:
cscript.exe script_name.vbs c:\myfile1.c c:\myfile2.c
Voici le code de script:
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
La sortie du script est comme:
There are 7 #define statement(s) in c:\myfile1.c
There are 0 #define statement(s) in c:\myfile2.c
- 1. Nombre d'arguments dans le fichier C++
- 2. Comptez le nombre de nœuds correspondant à une expression XPath donnée dans XmlSpy
- 3. Plier automatiquement #defines dans vim
- 4. Programmer un fichier .vbs à exécuter dans Windows
- 5. #defines dans les scripts de liens
- 6. Compiler Time DEFINEs dans un projet de déploiement Web ASP.NET
- 7. Déterminer le nombre de lignes dans un fichier texte
- 8. nombre de pages dans un fichier pdf
- 9. Comment obtenir le nombre de lignes dans un fichier en C#?
- 10. Méthode la plus compacte pour compter le nombre de lignes dans un fichier en C++
- 11. Durée Fonction vbscript (vbs)
- 12. MySQL: comptez les objets groupés?
- 13. Indice d'erreur hors plage dans le script vbs
- 14. Lire un fichier texte ligne par ligne dans un script batch ou VBS?
- 15. Remplacement automatique des variables par #defines
- 16. Requête: comptez plusieurs agrégats par élément
- 17. Comment exécuter un fichier .vbs à partir de Microsoft Script Editor?
- 18. Comment comptez-vous les mots dans un tableau de chaînes avec LINQ?
- 19. Oneliner compte le nombre d'onglets dans chaque ligne d'un fichier
- 20. Comment supprimer tous les n-ième caractères dans le fichier (par lot ou vbs)?
- 21. Estimation rapide du nombre de lignes dans un fichier Excel
- 22. Comment formater un nombre décimal en un nombre de décimales contrôlé par programme dans C#?
- 23. chaîne VBS wizzardry
- 24. Système d'exploitation Script VBS
- 25. VBS- cordes divisé multiples sur plusieurs lignes dans un tableau
- 26. VBS Computer Info Script
- 27. Problème avec 2 commande dans 1 vbs
- 28. Limite Nombre de caractères dans C# Chaîne
- 29. Nombre de fichiers supprimés du fichier batch
- 30. pouvons-nous utiliser un nombre comme noeud de texte dans le fichier XML?
Un fichier texte consiste en une séquence de caractères. Si vous ne définissez pas où une "chaîne" se termine et où la suivante commence, la réponse est juste "1". Vous pouvez créer une fonction qui renvoie simplement 1. –
salut daniel, Pour rendre la question plus claire et better.i voulez écrire un fichier de script VBS qui compte le nombre de chaînes de #define présentes dans a.c, et b.c C.C. – Maddy
J'ai réécrit la question en fonction de cela. S'il vous plaît laissez-moi savoir si c'est exact. –