Précédent   Forum du club des développeurs et IT Pro > Autres langages > Général Visual Basic 6 et VBScript > VBScript
VBScript Le forum d'entraide sur VBScript. Avant de poster -> La FAQ VBScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 26/02/2013, 15h45   #1
casanueva
Invité de passage
 
Inscription : juin 2009
Messages : 12
Détails du profil
Informations personnelles :
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : juin 2009
Messages : 12
Points : 0
Points : 0
Par défaut Parcourir des centaines de fichiers txt

Bonjour,

je sollicite votre aide en vbs.

J'aimerai parcourir un répertoire contenant plein de fichier .txt à l'aide d'un vbs, de les ouvrir et de prendre une partie de ces fichiers et les mettre dans un .csv

Ces fichiers .txt sont des fichiers correspondant à des postes clients (un fichier = un poste client).
Il y a son login, le nom de sa machine, numéro de série du poste...et ce qui m’intéresse de récupérer c'est la partie qui s'appelle "Applications Installées".

Tout ceci afin de récupérer les logiciels installés (dans le cadre d'une gestion de licences) en évitant les doublons (car il y en aura certainement).

Merci d'avance pour votre aide.
casanueva est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2013, 16h06   #2
hackoofr
Expert Confirmé
 
Avatar de hackoofr
 
Homme Mehdi Tounisiano
Enseignant
Inscription : juin 2009
Messages : 1 641
Détails du profil
Informations personnelles :
Nom : Homme Mehdi Tounisiano
Âge : 38
Localisation : Tunisie

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : juin 2009
Messages : 1 641
Points : 3 717
Points : 3 717

Avez-vous fait un script jusqu'à présent
Vous pouvez consultez la VB ScriptFichiers : le FileSystemObjectAccès aux Fichiers
puis commencer à écrire le début du script
hackoofr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2013, 16h17   #3
casanueva
Invité de passage
 
Inscription : juin 2009
Messages : 12
Détails du profil
Informations personnelles :
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : juin 2009
Messages : 12
Points : 0
Points : 0
Citation:
Envoyé par hackoofr Voir le message

Avez-vous fait un script jusqu'à présent
Vous pouvez consultez la VB ScriptFichiers : le FileSystemObjectAccès aux Fichiers
puis commencer à écrire le début du script
J'ai trouvé ceci mais j'aimerai l'adapter. A savoir, récupérer tout ce qui a dans le fichier txt après la section "Applications installées" jusqu'à la fin de la section symbolisée par
--------------------------------------------------
pour tous les fichiers txt dans mon répertoire


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
onst ForReading = 1
dim var1
set var1 = WScript.Arguments
Set objRegEx = CreateObject("VBScript.RegExp")
objRegEx.Pattern = "Applications Installées"
Set objRegEx2 = CreateObject("VBScript.RegExp")
objRegEx2.Pattern = var1(0)
 
 
Dim string1,string2
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("C:\Posteclient\"&var1(0)&"", ForReading)
Set FileSystem = WScript.CreateObject("Scripting.FileSystemObject")
Set OutPutFile = FileSystem.OpenTextFile("C:\Posteclient\",8,true)
 
 
Do Until objFile.AtEndOfStream
    strSearchString = objFile.ReadLine
    Set colMatches = objRegEx.Execute(strSearchString)  
    Set colMatches2 = objRegEx2.Execute(strSearchString)  
 
	If colMatches.Count > 0 Then
        For Each strMatch in colMatches   
            	string1=ltrim(replace(strSearchString,"Applications Installées","") )
        Next
    End If
	'recherche la variable
	If colMatches2.Count > 0 Then
        For Each strMatch in colMatches2   
            string2=ltrim(replace(strSearchString,var1(1),"") )
        Next
    End If
 
 
Loop
'OutPutFile.WriteLine var1(0)&"#"&string1&"#"&string2
'recherche la date du log
set FSO=CreateObject("Scripting.FileSystemObject")
Set File=FSO.GetFile("C:\Posteclient\"&var1(0)&"")
Date1=File.DateLastModified
machine=UCase((replace(var1(0),".txt","") ))
'msgbox machine&"#"&string1&"#"&string2&"#"&date1
OutPutFile.WriteLine machine&"#"&string1&"#"&string2&"#"&date1
 
objFile.Close
casanueva est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2013, 09h45   #4
pitchalov
Membre éclairé
 
Avatar de pitchalov
 
Homme Manu
Inscription : avril 2007
Messages : 276
Détails du profil
Informations personnelles :
Nom : Homme Manu
Âge : 26
Localisation : France

Informations forums :
Inscription : avril 2007
Messages : 276
Points : 392
Points : 392
Bonjour,

Si dans tes fichiers texte, toutes les lignes après la ligne "Applications installées" sont des noms d'application, jusqu'à la ligne "-------", alors je propose cette solution (+ petit compteur des applications présentes du coup, ça fait pas de mal =]) :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
''' Lecture des fichiers Txt
Set objFso = CreateObject("Scripting.FileSystemObject")
Set objAppDictionnary = CreateObject("Scripting.Dictionary") 'Création du dictionnaire contenant tes applis
objAppDictionnary.CompareMode = 1 'Mode de comparaison : texte
Set objRootFolder = objFso.GetFolder ("C:\Temp") 'Récupération du répertoire contenant les fichiers txt
For Each objFile In objRootFolder.Files 'Pour chaque fichier du répertoire
	Set objTmpFile = objFso.OpenTextFile(objFile.Path, 1) 'Ouverture du fichier en lecture
	boolGetFileContent = False
	Do Until objTmpFile.AtEndOfStream 'Boucle de lecture du fichier
		strTmpLine =  objTmpFile.ReadLine
		If StrComp(strTmpLine, "Applications installées", vbTextCompare) = 0 Then
			boolGetFileContent  = True ' Si la ligne "Applications installées" est trouvée, on commence à récupérer les infos
			strTmpLine =  objTmpFile.ReadLine
		End If
		If Instr(strTmpLine, "-----") > 0 Then boolGetFileContent = False ' Si la ligne "----" est trouvée, on arrête de récupérer les infos
		If boolGetFileContent = True Then
			If objAppDictionnary.Exists(strTmpLine) Then
				objAppDictionnary.Item(strTmpLine) = objAppDictionnary.Item(strTmpLine) + 1 'Si l'application a déjà été trouvée, incrémentation du compteur
			Else
				objAppDictionnary.Add(strTmpLine, 1) 'Sinon ajout de l'application au dictionnaire
			End If
		End If
	Loop
	objTmpFile.Close 'Fermeture du fichier
Next
''' Ecriture du résultat dans un fichier CSV
Set objCsvFile = objFso.CreateTextFile("C:\Temp\resultat.csv") 'Creation du fichier csv
objCsvFile.WriteLine "Application;Nombre d'occurences"
For Each strKey In objAppDictionnary.Keys 'Pour chaque application contenue dans le dictionnaire
	objCsvFile.WriteLine strKey & ";" & objAppDictionnary.Item(strKey)
Next
objCsvFile.Close
Ce code n'a pas été testé donc il y aura peut-être quelques erreurs / oublis (à corriger), mais c'est dans l'esprit de ce que tu as demandé.
De plus cela montre un bon exemple d'utilisation de dictionnaire en vbs =).

Bonne continuation.
pitchalov est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2013, 13h36   #5
casanueva
Invité de passage
 
Inscription : juin 2009
Messages : 12
Détails du profil
Informations personnelles :
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : juin 2009
Messages : 12
Points : 0
Points : 0
Citation:
Envoyé par pitchalov Voir le message
Bonjour,

Si dans tes fichiers texte, toutes les lignes après la ligne "Applications installées" sont des noms d'application, jusqu'à la ligne "-------", alors je propose cette solution (+ petit compteur des applications présentes du coup, ça fait pas de mal =]) :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
''' Lecture des fichiers Txt
Set objFso = CreateObject("Scripting.FileSystemObject")
Set objAppDictionnary = CreateObject("Scripting.Dictionary") 'Création du dictionnaire contenant tes applis
objAppDictionnary.CompareMode = 1 'Mode de comparaison : texte
Set objRootFolder = objFso.GetFolder ("C:\Temp") 'Récupération du répertoire contenant les fichiers txt
For Each objFile In objRootFolder.Files 'Pour chaque fichier du répertoire
	Set objTmpFile = objFso.OpenTextFile(objFile.Path, 1) 'Ouverture du fichier en lecture
	boolGetFileContent = False
	Do Until objTmpFile.AtEndOfStream 'Boucle de lecture du fichier
		strTmpLine =  objTmpFile.ReadLine
		If StrComp(strTmpLine, "Applications installées", vbTextCompare) = 0 Then
			boolGetFileContent  = True ' Si la ligne "Applications installées" est trouvée, on commence à récupérer les infos
			strTmpLine =  objTmpFile.ReadLine
		End If
		If Instr(strTmpLine, "-----") > 0 Then boolGetFileContent = False ' Si la ligne "----" est trouvée, on arrête de récupérer les infos
		If boolGetFileContent = True Then
			If objAppDictionnary.Exists(strTmpLine) Then
				objAppDictionnary.Item(strTmpLine) = objAppDictionnary.Item(strTmpLine) + 1 'Si l'application a déjà été trouvée, incrémentation du compteur
			Else
				objAppDictionnary.Add(strTmpLine, 1) 'Sinon ajout de l'application au dictionnaire
			End If
		End If
	Loop
	objTmpFile.Close 'Fermeture du fichier
Next
''' Ecriture du résultat dans un fichier CSV
Set objCsvFile = objFso.CreateTextFile("C:\Temp\resultat.csv") 'Creation du fichier csv
objCsvFile.WriteLine "Application;Nombre d'occurences"
For Each strKey In objAppDictionnary.Keys 'Pour chaque application contenue dans le dictionnaire
	objCsvFile.WriteLine strKey & ";" & objAppDictionnary.Item(strKey)
Next
objCsvFile.Close
Ce code n'a pas été testé donc il y aura peut-être quelques erreurs / oublis (à corriger), mais c'est dans l'esprit de ce que tu as demandé.
De plus cela montre un bon exemple d'utilisation de dictionnaire en vbs =).

Bonne continuation.

Super ! Merci beaucoup, j'ai testé c'est exactement ce que je voulais (+ l'incrément)

Encore merci mille fois pitchalov
casanueva est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 05h20.


 
 
 
 
Partenaires

Hébergement Web