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

VB 6 et antérieur Discussion :

Appliquer une fonction à plusieurs dossiers.


Sujet :

VB 6 et antérieur

  1. #1
    Membre du Club Avatar de MegaBigBoss
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 144
    Points : 61
    Points
    61
    Par défaut Appliquer une fonction à plusieurs dossiers.
    Bonjour tout le monde , je vien poster ici car , j'ai un petit problème et que je n'ai rien trouvé qui pourrait m'aider dans la FAQ ou autre .

    Alors , j'ai un petit logiciel , qui au lancement , utilise la fonctione ChangeWords

    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
    FONCTION CHANGEWORDS
     
    Private Function ChangeWords(sWordsToRemove As String, sWordsToChange As String, sFile As String) As Boolean
        If Dir(sFile, vbSystem Or vbHidden) = vbNullString Then
            ChangeWords = False
        Else
    '       ouvre le fichier
            Dim FF As Integer, sBuffer As String
            FF = FreeFile
            Open sFile For Input As #FF
                sBuffer = Input(LOF(FF), 1)
            Close #FF
    '       ligne à changer existe?
            Dim lPos As Long
            lPos = InStr(1, sBuffer, sWordsToRemove)
            If lPos = 0 Then
                ChangeWords = False
            Else
    '           on découpe
                Dim sFirst As String, sLast As String
                sFirst = Left$(sBuffer, lPos - 1)
                sLast = Right$(sBuffer, Len(sBuffer) - lPos - Len(sWordsToRemove) + 1)
    '           on écrit
                FF = FreeFile
                Open sFile For Output As #FF
                    Print #FF, sFirst & sWordsToChange & sLast
                Close #FF
                ChangeWords = True
            End If
        End If
    End Function
    Donc cette fonction , sert à remplacer une chaine de caractère "sWordToRemove" pas une chaine de caractère "sWordToChange".
    Donc jusque la , tout vas bien.
    Ensuite , vien le problème : J'aimerais appliquer ce code , sur plusieurs fichier , je m'explique.

    Voila mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim Desac As Long
    For Desac = 1 To 50 Step 1
    ChangeWords "enabled", "disabled", "c:/TEST/TEST/" & * & "test.txt"
    Next Desac
    J'aimerai , que la valeur "Enabled" se trouvant dans le fichiet texte "test.txt" soit modifié , mais , j'ai plusieurs test.txt , il y en a un se trouvant dans "c:/TEST/TEST/1" un dans "c:/TEST/TEST/2" etc ... et j'ai pensé au joker ... mais malheureusement , cela ne fonctionne pas , il me met une erreur : Incorrect syntax a la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ChangeWords "enabled", "disabled", "c:/TEST/TEST/" & * & "test.txt"
    Donc j'ai essayé de modifier ça en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ChangeWords "enabled", "disabled", "c:/TEST/TEST/" & "*" & "test.txt"
    Mais biensur , ça ne fonctionne pas : Bad filename , il ne trouve pas le fichier , donc , pourriez vous me proposer un solution adéquate à mon problème , ou me proposer un morceau de code qui fonctionne ?

    En tout cas , je remerci ceux qui auront lu le poste en entier

    Cordialement ,

    MegaBigBoss

  2. #2
    Membre habitué
    Inscrit en
    Mai 2002
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 163
    Points : 173
    Points
    173
    Par défaut
    Bonjour,

    je vois 2 solutions à ton problème :
    - soit tu connais le nombre de répertoire et tu fais une boucle dessus (mais il faut que les chemins soit au même format, c'est à dire c:\test\testx ou x va de 1 a 100 par exemple)
    - soit tu fait une fonction récursive qui parcourra l'ensemble de tes répertoires à la recherche de fichier nommé "test.txt", et ceci, à partir d'un répertoire racine (et la, plus de problème de chemin correctement formaté)

    Dans les deux cas, tu peux trouver de l'aide en faisant une recherche sur le forum

  3. #3
    Membre du Club Avatar de MegaBigBoss
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 144
    Points : 61
    Points
    61
    Par défaut
    Non , je ne connais pas le nombre de repertoire mais , je vais voir pour une fonction récursive.

    Merci de ta réponse

  4. #4
    Membre habitué
    Inscrit en
    Mai 2002
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 163
    Points : 173
    Points
    173
    Par défaut
    Pour la fonction récursive, je t'explique grossièrement le principe :

    Le but étant de faire une fonction qui s'appelle elle même.

    Il te faut créer une fonction a qui tu passe en paramètre un chemin (la première fois, ce sera le répertoire racine) et qui control la liste des fichiers et dossiers :
    2 cas :
    - soit l'élément de la liste est un fichier, il te faut controler si le fichier est un fichier "test.txt" et si besoin faire ta modif ...
    - soit l'élément est un répertoire, il te faut alors appeler ta fonction récursive (elle même donc) en lui passant en paramètre non plus le répertoire d'origine, mais l'élément de la liste ...

    Si tu suis le cheminement, tu veras qu'a chaque appelle de cette fonction, tu descend un peu plus dans l'arborescence jusqu'a avoir scanner tous les sous répertoires a partir du répertoire d'origine ...
    J'espère que mon explication est assez clair. Je sais qu'il y a plein d'exemple dans le forum et il me semble aussi qu'il y a quelque chose dans le tutoriel là dessus.

    A toi de jouer

  5. #5
    Membre du Club Avatar de MegaBigBoss
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 144
    Points : 61
    Points
    61
    Par défaut
    Alors j'ai pas mal avancé grace a ton aide
    Donc , maintenant j'ai ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ScanFolder "C:\TEST", "addons.txt", True
    Dim AddOns As String
    Dim Desac As Long
    Dim x As Long
    Dim y As Long
    y = List1.ListCount
      For x = 1 To y Step 1
        For Desac = 1 To 5 Step 1
        ChangeWords "enabled", "disabled", ""
        Next Desac
      Next x
    Et la fonction ScanFolder de ThierryAIM (que je remerci )

    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
    Public Function ScanFolder(FolderPath As String, Optional Filename As String = "", Optional SubFold As Boolean = True) As Long
    ' Fonction récursive pour l'exploration des répertoires
     
        Dim Element As Variant
        Dim StrPath() As String
     
        ScanFolder = fs.GetFolder(FolderPath).Files.Count
     
        For Each Element In fs.GetFolder(FolderPath).Files
     
            If Filename <> "" Then
                StrPath = Split(Element, "\")
                If InStr(1, StrPath(UBound(StrPath)), Filename) Then _
                        frmLuncher.List1.AddItem Element
            Else
                frmLuncher.List1.AddItem Element
            End If
            DoEvents
        Next Element
     
        If SubFold Then
            For Each Element In fs.GetFolder(FolderPath).SubFolders
                ScanFolder = ScanFolder + ScanFolder(Element.Path, Filename, SubFold)
            Next Element
        End If
    End Function
    Voila , donc , maintenant , il modifie Enabled , par Disabled 5y fois ,
    Mais il ne le fait a aucun des fichiers car maintenant , il le ferais 5y fois au fichier selectionné donc , il faut que je fasse une variable fichier qui choisirait dans la list1 la prochaine donnée ... mais si je fais mon code ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ScanFolder "C:\TEST", "addons.txt", True
    Dim AddOns As String
    Dim Desac As Long
    Dim x As Long
    Dim y As Long
    y = List1.ListCount
      For x = 1 To y Step 1
        For Desac = 1 To 5 Step 1
        ChangeWords "enabled", "disabled", fichier    
      Next Desac
      Next x
    Il changeras de fichier tout les "Desac" fois (donc 5 fois) et ceci ne peut etre fait car ma fonction ne modifie que le premier "Enabled" de mon ficher , et si il le fait 5 fois il modifieras les 5 premier ...

    Je ne sais pas si je me suis bien fait comprendre ,mais , merci pour ton aide qui m'as permit de beaucoup avancer

    Cordialement ,

    MegaBigBoss

    EDIT : Je vien d'avoir une superbe idée mais , je vais tester :
    L'idée , c'est que fichier = la premiére ligne de list1 , et que tout les y fois , il supprime la première ligne Donc Parfaiiit !
    (je ferait un code plus tard)

  6. #6
    Membre du Club Avatar de MegaBigBoss
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 144
    Points : 61
    Points
    61
    Par défaut
    Voila , j'ai réussi Merci de m'avoir mis sur la voie (je met mon code au cas ou quelqu'un en aurait besoin x)

    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
    ScanFolder "C:\TEST", "addons.txt", True
      Dim AddOns As String
      Dim Desac As Long
      Dim x As Long
      Dim File As String
      Dim y As Long
        y = List1.ListCount
          For x = 1 To y Step 1
           List1.ListIndex = 0
           File = List1.List(List1.ListIndex)
            For Desac = 1 To 50 Step 1
             ChangeWords "enabled", "disabled", File
            Next Desac
           List1.RemoveItem 0
          Next x
    Alors , ce code transforme les "enabled" en "disabled" dans tous les fichier "addons.txt" contenu dans le dossier TEST ainsi que ses sous dossiers
    Cordialement ,

    MegaBigBoss

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

Discussions similaires

  1. Appliquer une fonction sur plusieurs sélecteurs
    Par chlock62 dans le forum jQuery
    Réponses: 2
    Dernier message: 12/02/2014, 17h42
  2. [PHP 5.0] Appliquer une fonction à plusieurs valeurs par référence
    Par gui80 dans le forum Langage
    Réponses: 12
    Dernier message: 09/03/2010, 13h42
  3. appliquer une fonction à toutes les balises <a>
    Par trotters213 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 30/10/2006, 16h49
  4. [MySQL] Appliquer une fonction sur un champ lors d'une requête
    Par Jérémy197 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 13/08/2006, 13h29
  5. Peut-on appliquer une fonction sur un champs ajouté?
    Par tinwul dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 31/05/2006, 17h02

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