+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Invité de passage
    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 : 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.

  2. #2
    Expert Confirmé Sénior
    Avatar de hackoofr
    Homme Profil pro Mehdi Tounisiano
    Enseignant
    Inscrit en
    juin 2009
    Messages
    2 793
    Détails du profil
    Informations personnelles :
    Nom : Homme Mehdi Tounisiano
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : juin 2009
    Messages : 2 793
    Points : 6 814
    Points
    6 814

    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
    Invité de passage
    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 : 0
    Points
    0

    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 :
    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 expérimenté Avatar de pitchalov
    Homme Profil pro Manu
    Inscrit en
    avril 2007
    Messages
    324
    Détails du profil
    Informations personnelles :
    Nom : Homme Manu
    Âge : 28
    Localisation : France

    Informations forums :
    Inscription : avril 2007
    Messages : 324
    Points : 527
    Points
    527

    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 :
    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
    Invité de passage
    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 : 0
    Points
    0

    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 :
    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •