IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

Parcourir des centaines de fichiers txt


Sujet :

VBScript

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    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 : 7
    Points
    7
    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.

  2. #2
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 839
    Points : 9 222
    Points
    9 222
    Par défaut

    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

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    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 : 7
    Points
    7
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  4. #4
    Membre confirmé Avatar de pitchalov
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 340
    Points : 582
    Points
    582
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    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 : 7
    Points
    7
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. extraction des données du fichier txt
    Par micha1 dans le forum Entrée/Sortie
    Réponses: 13
    Dernier message: 14/01/2010, 14h28
  2. Retirer des informations dans fichier .txt
    Par cricri77200 dans le forum Langage
    Réponses: 9
    Dernier message: 09/06/2009, 15h22
  3. Importation d'une centaine de fichiers TXT
    Par cavo789 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/12/2007, 06h53
  4. Mettre des infos ds Fichier txt
    Par DirtyA:ex dans le forum VBScript
    Réponses: 3
    Dernier message: 20/07/2006, 14h34
  5. Importer des donnees avec fichier txt
    Par flOZ dans le forum Requêtes
    Réponses: 8
    Dernier message: 21/04/2006, 17h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo