Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 15 sur 15
  1. #1
    Membre Expert

    Homme Profil pro Kévin
    Apprenti Ingénieur Réseaux & Systèmes
    Inscrit en
    juin 2012
    Messages
    609
    Détails du profil
    Informations personnelles :
    Nom : Homme Kévin
    Âge : 22
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Apprenti Ingénieur Réseaux & Systèmes
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : juin 2012
    Messages : 609
    Points : 1 589
    Points
    1 589

    Par défaut Écriture impossible liée à un Regex

    Bonjour le Forum,

    Je sollicite votre précieuse aide.

    Je cherche à vérifier les fichiers d'un dossier et écrire dans un .txt leur noms s'ils contiennent _3.9_. Pfiou tout ça.

    J'ai essayé ce code qui malheureusement ne fonctionne pas.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    For Each Fichier In Folder.Files
    		If (FSO.GetExtensionName(Fichier.Path) = "txt") Then
    			Set OutPut = fso.OpenTextFile(Path_ListeXML,1)
    			Set objRegex = new RegExp
    			objRegex.Pattern = "(.w*)*\_3.9_(.w*)*\.txt"
    			objRegex.IgnoreCase = True
    			MsgBox(Fichier.Name) 
    			'Set Matches = objRegex.Execute(Fichier.Name) 'Ok jusqu'ici
    			Set Matches = objRegex.Test(Fichier.Name)
    			'For Each Match in Matches    				                 'OutPut.WriteLine (Fichier.Name)
    			'Next
    			'If (Matches.Count=1) Then
    			If (Matches=1) Then
    				Set OutPut = fso.OpenTextFile(Path_ListeXML,1)
    				OutPut.WriteLine (Fichier.Name)
    			End If
     
    		End If
    Next

    Merci à vous,


    Miistik

  2. #2
    Rédacteur/Modérateur
    Avatar de ProgElecT
    Homme Profil pro Francis MILLET
    Inscrit en
    décembre 2004
    Messages
    3 489
    Détails du profil
    Informations personnelles :
    Nom : Homme Francis MILLET
    Âge : 58
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Secteur : Communication - Médias

    Informations forums :
    Inscription : décembre 2004
    Messages : 3 489
    Points : 6 359
    Points
    6 359

    Par défaut

    Salut

    Ligne 14
    Code :
    Set OutPut = fso.OpenTextFile(Path_ListeXML,1)
    Le dernier paramétre ne devrait il pas égal à 2 (ForWriting, Ouvre un fichier en écriture) plutot que 1 (ForReading, Ouvre un fichier en lecture seule)

  3. #3
    Membre Expert

    Homme Profil pro Kévin
    Apprenti Ingénieur Réseaux & Systèmes
    Inscrit en
    juin 2012
    Messages
    609
    Détails du profil
    Informations personnelles :
    Nom : Homme Kévin
    Âge : 22
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Apprenti Ingénieur Réseaux & Systèmes
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : juin 2012
    Messages : 609
    Points : 1 589
    Points
    1 589

    Par défaut

    Salut ProgElecT,


    Merci de ta réponse.
    J'ai corrigé l'erreur.

    Apparemment, le problème vient de
    Code :
    Set Matches = objRegex.Test(Fichier.Name)
    On me dit Objet Requis.

    Pourtant ma MessageBox au dessus affiche bien la liste de mes fichiers présents .

  4. #4
    Rédacteur/Modérateur
    Avatar de ProgElecT
    Homme Profil pro Francis MILLET
    Inscrit en
    décembre 2004
    Messages
    3 489
    Détails du profil
    Informations personnelles :
    Nom : Homme Francis MILLET
    Âge : 58
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Secteur : Communication - Médias

    Informations forums :
    Inscription : décembre 2004
    Messages : 3 489
    Points : 6 359
    Points
    6 359

    Par défaut

    Et si tu remplaces la ligne 14 par
    Code :
    			If objRegex.Test(Fichier.Name) = True Then
    ?

  5. #5
    Membre Expert

    Homme Profil pro Kévin
    Apprenti Ingénieur Réseaux & Systèmes
    Inscrit en
    juin 2012
    Messages
    609
    Détails du profil
    Informations personnelles :
    Nom : Homme Kévin
    Âge : 22
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Apprenti Ingénieur Réseaux & Systèmes
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : juin 2012
    Messages : 609
    Points : 1 589
    Points
    1 589

    Par défaut

    Comme cela ?

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    For Each Fichier In Folder.Files
    		If (FSO.GetExtensionName(Fichier.Path) = "txt") Then
     
    			Set objRegex = new RegExp
    			objRegex.Pattern = "(.w*)*\_3.9_(.w*)*\.txt"
    			objRegex.IgnoreCase = True
    			MsgBox(Fichier.Name) 
    			'Set Matches = objRegex.Execute(Fichier.Name) 'Ok jusqu'ici
    			'Set Matches = objRegex.Test(Fichier.Name)
    		    'For Each Match in Matches   'I&tère la collection Matches.
    			'	OutPut.WriteLine (Fichier.Name)
    			'Next
    			'If (Matches.Count=1) Then
    			'If (Matches=1) Then
    				'Set OutPut = fso.OpenTextFile(Path_ListeXML,2)
    				If objRegex.Test(Fichier.Name) = True Then
    				  Set OutPut = fso.OpenTextFile(Path_ListeXML,2)
    				  OutPut.WriteLine (Fichier.Name)
    			            End If
     
    		End If
    Next
    Là, je n'ai plus la permission d'ouvrir mon fichier ... hum

  6. #6
    Rédacteur/Modérateur
    Avatar de ProgElecT
    Homme Profil pro Francis MILLET
    Inscrit en
    décembre 2004
    Messages
    3 489
    Détails du profil
    Informations personnelles :
    Nom : Homme Francis MILLET
    Âge : 58
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Secteur : Communication - Médias

    Informations forums :
    Inscription : décembre 2004
    Messages : 3 489
    Points : 6 359
    Points
    6 359

    Par défaut

    Tu ne rentres pas dans la condition If objRegex.Test(Fichier.Name) = True Then Le test renvoi False ou bien c'est l'ouverture du fichier qui est refusé ?

  7. #7
    Membre Expert

    Homme Profil pro Kévin
    Apprenti Ingénieur Réseaux & Systèmes
    Inscrit en
    juin 2012
    Messages
    609
    Détails du profil
    Informations personnelles :
    Nom : Homme Kévin
    Âge : 22
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Apprenti Ingénieur Réseaux & Systèmes
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : juin 2012
    Messages : 609
    Points : 1 589
    Points
    1 589

    Par défaut

    C'est l'ouverture du fichier qui échoue. (Permission refusée)

    Le test est correct.

  8. #8
    Rédacteur/Modérateur
    Avatar de ProgElecT
    Homme Profil pro Francis MILLET
    Inscrit en
    décembre 2004
    Messages
    3 489
    Détails du profil
    Informations personnelles :
    Nom : Homme Francis MILLET
    Âge : 58
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Secteur : Communication - Médias

    Informations forums :
    Inscription : décembre 2004
    Messages : 3 489
    Points : 6 359
    Points
    6 359

    Par défaut

    Si tu es sûr du chemin et nom du fichier contenu dans Path_ListeXML
    Peut être ajouter le 3° parametre Set OutPut = fso.OpenTextFile(Path_ListeXML,2,True)

  9. #9
    Membre Expert

    Homme Profil pro Kévin
    Apprenti Ingénieur Réseaux & Systèmes
    Inscrit en
    juin 2012
    Messages
    609
    Détails du profil
    Informations personnelles :
    Nom : Homme Kévin
    Âge : 22
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Apprenti Ingénieur Réseaux & Systèmes
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : juin 2012
    Messages : 609
    Points : 1 589
    Points
    1 589

    Par défaut

    Oui, je suis sûr.
    Toujours pas avec True en plus.

    Voici le code entier actuel :
    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
    Dossier = "C:\Monitoring"  ' A spécifier !!!
    Path_ListeXML = Dossier & "\ListeXML.txt"
     
    Set fso = CreateObject("Scripting.FileSystemObject" ) 
     
     
    'On verifie que le repertoire à analyser existe 
    If (myName = Winrep = fso.FolderExists(Dossier) = False) Then 
        Erreur = MsgBox("Le dossier n'existe pas !" ) 
        Wscript.Quit 
    End If 
    Recherche(Dossier)
     
     
    Private Sub Recherche(FolderPath) 
     
    If not fso.fileExists(Path_ListeXML) Then
    Set OutPut = fso.CreateTextFile(Path_ListeXML,True)
    End If 
     
    Set Folder = fso.Getfolder(FolderPath) 
     
    For Each Fichier In Folder.Files
    		If (FSO.GetExtensionName(Fichier.Path) = "txt") Then
     
    			Set objRegex = new RegExp
    			objRegex.Pattern = "(.w*)*\_3.9_(.w*)*\.txt"
    			objRegex.IgnoreCase = True
    			MsgBox(Fichier.Name) 
     
    				If objRegex.Test(Fichier.Name) = True Then
    				  Set OutPut = fso.OpenTextFile(Path_ListeXML,2,True)  '8 si on veut pas écrasé
    				  OutPut.WriteLine (Fichier.Name)
    			    End If
     
    		End If
    Next
    End Sub

  10. #10
    Rédacteur/Modérateur
    Avatar de ProgElecT
    Homme Profil pro Francis MILLET
    Inscrit en
    décembre 2004
    Messages
    3 489
    Détails du profil
    Informations personnelles :
    Nom : Homme Francis MILLET
    Âge : 58
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Secteur : Communication - Médias

    Informations forums :
    Inscription : décembre 2004
    Messages : 3 489
    Points : 6 359
    Points
    6 359

    Par défaut

    Si tu peux créer/écrire dans ce dossier, je ne vois pas ou cela coince.
    Pourquoi des parenthèses ? OutPut.WriteLine (Fichier.Name)

  11. #11
    Membre Expert

    Homme Profil pro Kévin
    Apprenti Ingénieur Réseaux & Systèmes
    Inscrit en
    juin 2012
    Messages
    609
    Détails du profil
    Informations personnelles :
    Nom : Homme Kévin
    Âge : 22
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Apprenti Ingénieur Réseaux & Systèmes
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : juin 2012
    Messages : 609
    Points : 1 589
    Points
    1 589

    Par défaut

    Code :
    OutPut.WriteLine Fichier.Name
    Même résultat.

    Avec On Error Resume Next, cela fonctionne niquel mais bon c'est pas propre.

  12. #12
    Membre Expert
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    juin 2007
    Messages
    671
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : juin 2007
    Messages : 671
    Points : 1 549
    Points
    1 549

    Par défaut

    Bonjour,
    Petite remarque idiote : on ouvre le fichier Output à chaque fois qu'on trouve un nom de fichier correspondant au pattern, mais quand est-ce qu'on le ferme ?

  13. #13
    Rédacteur/Modérateur
    Avatar de ProgElecT
    Homme Profil pro Francis MILLET
    Inscrit en
    décembre 2004
    Messages
    3 489
    Détails du profil
    Informations personnelles :
    Nom : Homme Francis MILLET
    Âge : 58
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Secteur : Communication - Médias

    Informations forums :
    Inscription : décembre 2004
    Messages : 3 489
    Points : 6 359
    Points
    6 359

    Par défaut

    Citation Envoyé par tedo01 Voir le message
    Bonjour,
    Petite remarque idiote : on ouvre le fichier Output à chaque fois qu'on trouve un nom de fichier correspondant au pattern, mais quand est-ce qu'on le ferme ?
    Pertinent en effet.

    Citation Envoyé par Miistik Voir le message
    Code :
    OutPut.WriteLine Fichier.Name
    Même résultat.
    Avec On Error Resume Next, cela fonctionne niquel mais bon c'est pas propre.
    L'erreur est sur Set OutPut = fso.OpenTextFile(Path_ListeXML,2,True) ou sur OutPut.WriteLine (Fichier.Name).


    Un petit nettoyage
    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
    Dossier = "C:\Monitoring"  ' A spécifier !!!
    Path_ListeXML = Dossier & "\ListeXML.txt"
     
    Set fso = CreateObject("Scripting.FileSystemObject" ) 
     
    'On verifie que le repertoire à analyser existe 
    If (myName = Winrep = fso.FolderExists(Dossier) = False) Then 
        Erreur = MsgBox("Le dossier n'existe pas !" ) 
        Wscript.Quit 
    End If 
     
    If Not fso.fileExists(Path_ListeXML) Then
    	Set OutPut = fso.CreateTextFile(Path_ListeXML,True)
    	OutPut.Close
    	Set OutPut = NotHing
    End If 
    Recherche(Dossier)
     
    Set fso = NotHing
     
    '----------------------------------------------------------------------------------------------------------------------
    Private Sub Recherche(FolderPath) 
    Set Folder = fso.Getfolder(FolderPath) 
    Set objRegex = new RegExp
    objRegex.Pattern = "(.w*)*\_3.9_(.w*)*\.txt"
    objRegex.IgnoreCase = True
    For Each Fichier In Folder.Files
    	If (FSO.GetExtensionName(Fichier.Path) = "txt") Then
     
    		If objRegex.Test(Fichier.Name) = True Then
    			Set OutPut = fso.OpenTextFile(Path_ListeXML,2,True)  '8 si on veut pas écrasé
    			OutPut.WriteLine (Fichier.Name)
    			OutPut.Close '<----- la contribution de tedo01
    			Set OutPut = NotHing
    		End If
     
    	End If
    Next
    Set Folder = NotHing
    Set objRegex = NotHing
    End Sub
    '----------------------------------------------------------------------------------------------------------------------
    La vérification de l’existence ou non du fichier Path_ListeXML n'a pas vraiment à voire avec la Sub Recherche.
    La création de l'objet RegExe et son paramétrage n'a besoin d'être fait qu'une seule fois.

    En espérant que tu n'auras plus besoin d'utiliser une gestion d'erreur.

  14. #14
    Membre Expert

    Homme Profil pro Kévin
    Apprenti Ingénieur Réseaux & Systèmes
    Inscrit en
    juin 2012
    Messages
    609
    Détails du profil
    Informations personnelles :
    Nom : Homme Kévin
    Âge : 22
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Apprenti Ingénieur Réseaux & Systèmes
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : juin 2012
    Messages : 609
    Points : 1 589
    Points
    1 589

    Par défaut

    Bonjour,

    Merci à vous deux.

    Le dernier code donné ne génère plus d'erreur, néanmoins il n'écrit pas l'intégralité des fichiers dans ListeXML.txt.
    Apparemment, c'est le 2 dans OpenTextFile qui n'écrit qu'une seule ligne.
    Le test avec l'indice 8 fonctionne.

    Hum.

    EDIT: Je vais peut-être dire une bêtise mais ça serait pas le Output.Close qui m'empecherait d'écrire plus d'une ligne ?
    Code :
    1
    2
    3
    4
    5
    6
    If objRegex.Test(Fichier.Name) = True Then
    			Set OutPut = fso.OpenTextFile(Path_ListeXML, 2)  '8 si on veut pas écrasé
    			OutPut.WriteLine (Fichier.Name)
    			OutPut.Close 			                          
                            Set OutPut = Nothing
    End If

  15. #15
    Membre Expert

    Homme Profil pro Kévin
    Apprenti Ingénieur Réseaux & Systèmes
    Inscrit en
    juin 2012
    Messages
    609
    Détails du profil
    Informations personnelles :
    Nom : Homme Kévin
    Âge : 22
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Apprenti Ingénieur Réseaux & Systèmes
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : juin 2012
    Messages : 609
    Points : 1 589
    Points
    1 589

    Par défaut

    Bonjour,

    Merci à vous deux.

    Avec une petite modif, cela réalise ce que je veux.

    Pour ceux que ça intéresse :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Private Sub ListeFichierXML(FolderPath) 
    Set Folder = fso.Getfolder(FolderPath) 
    Set objRegex = new RegExp
    objRegex.Pattern = "(.w*)*\_3.9_(.w*)*\.xml"
    objRegex.IgnoreCase = True
    Set OutPut = fso.OpenTextFile(Path_ListeXML,2,True)  '8 si on veut pas écrasé
    For Each Fichier In Folder.Files
    	If (fso.GetExtensionName(Fichier.Path) = "xml") Then
     
    		If objRegex.Test(Fichier.Name) = True Then
     
    			OutPut.WriteLine (Fichier.Name)
    			'OutPut.Close 
    			'Set OutPut = Nothing
    		End If
     
    	End If
    Next
    OutPut.Close 
    Set OutPut= Nothing
    Set Folder = Nothing
    Set objRegex = Nothing
    End Sub

+ 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
  •