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 :

Traiter chaque fichier dans un répertoire ? Assez complexe - Help


Sujet :

VBScript

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 12
    Points : 5
    Points
    5
    Par défaut Traiter chaque fichier dans un répertoire ? Assez complexe - Help
    Bonjour à tous,

    Etant debutant et n'ayant pas vraiment trouvé une réponse en cherchant, je vous pose la question :

    J'ai plusieurs fichiers log qui contiennent les données de backup de chaque utilisateurs : il contient la date, la taille du backup, le nombre de fois....
    La taille du backup dans le fichier est délimitée par des "< >". Par exemple < 700.450>
    J'ai commencé par traité un seul fichier pour m'entrainer.
    J'effectue une recherche dans le texte et j'arrive à saisir la valeur située entre les <> avec ce code :

    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
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFile = objFSO.OpenTextFile("H:\Backup\user1-Backup.log")
     
    Do Until objFile.AtEndOfStream
        strData = ""
        strSearchString = objFile.ReadLine
     
        intStart = InStr(strSearchString, "<")
     
        If intStart <> 0 Then
            intStart = intStart + 2
            strText = Mid(strSearchString, intStart, 250)
     
            For i = 1 to Len(strText)
                     If Mid(strText, i, 1) = ">" Then
                    Exit For
                Else
                    strData = strData & Mid(strText, i, 1) 
     
                End If
            Next
    Le résultat de cette opération est stocké dans un fichier texte. ( Est ce la bonne méthode ? ou faut-il stocker temporairement en mémoire ? )
    Jusque là je me débrouilles péniblement.
    Mais là ou je bloque c'est que je dois effectuer ces opérations sur tous les fichiers présents dans un répertoire et je ne sais vraiment pas comme faire ?


    Je dois faire aussi le total de la taille des backup présents dans chaque fichier et placer le résultat dans un fichier texte unique pour les statistiques mais je galère vraiment...
    ça veut dire que dois effectuer le premier code en haut pour chaque fichier, faut-il créer une fonction ou un sub pour ce code et l'appeler dans la boucle FOR...EACH ? J'ai vraiment du mal à coder...
    Peut-on stocker le résultat de chaque fichier dans une variable ou plusieurs variables et les mettre ensuite dans un fichier unique , je deviens fou, cela fait 3 jours que je galère , je désespere vraiment..

    Tous ce que je sais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Set oFSO = CreateObject("Scripting.FileSystemObject")
          stRep = Dossier
            For Each oFl In oFSO.GetFolder(stRep).Files
           ................ 
           LE CODE POUR 1 FICHIER
           ................
           Loop
    Excusez moi s'il y a des fautes ou si je ne suis pas clair, il est 3h30 du mat et je me casse la tete sur le code. En plus ça doit etre fonctionnel pour la fin de la semaine sinon le chef ne va pas être content...

    PLEASE AIDEZ MOI SVP

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    oui réorganise ton code , n'utilise qu'un seul objet Ofso ...

    un truc du genre (à compléter...)

    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
     
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    ParcoursRep ("MonRepertoire")
    Set ObjFso = Nothing 
    Sub ParcoursRep (stRep)
     
          For Each oFl In oFSO.GetFolder(stRep).Files
               iTaille = fctLectureTaille ( oFl)                 
               StockeResultat  oFl, iTaille ' Fonction de traitement du résultat à créer
          Next
    end sub
     
     
    '
    ' lecture taille du fichier donné en paramétre
    '
     
    fctLEctureTaille  ( oFl) 
     set objFile = ofl.OpenAsTextStream (1,-2) 'ForReading,TristateUseDefault
    Do Until objFile.AtEndOfStream
        strData = ""
     ...
    ...
       FctLectureTaille= strData 'Renvoi le résultat ...
     
     
    End function

  3. #3
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    A mon avis, il serait judicieux que tu suive la démarche suivante :
    Penser à comment tu ferait manuellement puis en déduire l'architecture du script, puis coder

  4. #4
    Futur Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Merci pour vos réponses

    Mais à vrai dire je n'ai pas bien saisi...
    Je résume :
    J'ai un folder qui contient des logs. Je dois parcourir chaque log situé dans ce folder et extraire des informations que je dois stocker dans un seul fichier qui servira de statistique : il contiendra la somme de tous les backups, la fréquence des backups....

    Voici le contenu d'un fichier backup (h:\Backup\user1-backup.log :

    ************************************************************************************************************************
    Backup date: <27/06/2007 16:41:54>

    Total size of the backup : <<678.692 Mb>>

    ************************************************************************************************************************

    ************************************************************************************************************************
    Backup date: <13/07/2007 10:59:31>

    Total size of the backup : <<696.333 Mb>>

    ************************************************************************************************************************

    ************************************************************************************************************************
    Backup date: <24/08/2007 12:15:16>

    Total size of the backup : <<710.514 Mb>>

    ************************************************************************************************************************

    ************************************************************************************************************************
    Backup date: <14/09/2007 17:45:27>

    Total size of the backup : <<747.748 Mb>>

    ************************************************************************************************************************

    ************************************************************************************************************************
    Backup date: <19/09/2007 18:08:55>

    Total size of the backup : <<755.377 Mb>>

    ************************************************************************************************************************


    Comme vous pouvez le voir on a la date et la taille du backup.
    Je dois aller extraire dans chaque fichier la valeur située entre les "< >" et les "<< >>"
    Donc pour la taille totale, je dois prendre la dernière valeur dans chaque fichier et les additionner.


    Si vous avez besoin de plus de précisions n'hésitez pas . MERCI ENCORE !!!

  5. #5
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Je pense que tu trouveras la solution pour ton script si tu te dit comment je ferais à la main sans script.
    Je m'explique avec un exemple. Lorsque je cherche une taille qui se trouve dans un fichier entre <<taille>> :
    1 - j'ouvre le fichier.
    2 - je lit ligne par ligne.
    3 - pour une ligne je cherche le symbole <<
    4 - lorsque je le trouve, je regarde s'il y a bien >> pas trop loin.
    5 - lorsque c'est le cas je prends la valeur qui est entre les symbole.
    6 - .....

    Bon ensuite devine le reste.

    Pour la recherche d'une expression variable mais de structure constante, du genre : <<toujours des chiffres et des fois un point>>, tu peux utiliser les expressions régulières.

    Pour additioner du texte -> tu ne peux pas, tu fait dans la concaténation dans ce cas là. Donc faut que tu convertisses tes nombres récupérer du fichier, qui sont du texte, en type int ou long.

    Ensuite tu peux faire l'addition.

  6. #6
    Futur Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    CED, je ne veux pas etre impoli mais tu ne m'aides pas, ce dont j'ai besoin c'est du code comme le fait tres bien BBil.
    Tu me conseilles comme le ferais un prof, c'est bien mais dans mon cas, j'ai besoin de plus, je ne sais pas coder , je débute. Si on me donne un code, je l'analyse et le comprend mais je suis incapable de créer quelque chose de complexe.

    Merci de ton aide ( et utilises tes doigts magiques pour m'écrire le code )

  7. #7
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Tu me conseilles comme le ferais un prof, c'est bien mais dans mon cas, j'ai besoin de plus, je ne sais pas coder , je débute. Si on me donne un code, je l'analyse et le comprend mais je suis incapable de créer quelque chose de complexe.
    Pour ça il y a la FAQ !!! Et les tutoriaux. Je ne suis pas une pondeuse de code.
    Moi je te propose une méthode pour apprendre à développer.
    Maintenant si tu n'es pas content de mes réponses tu n'en tiens pas compte. Je te rappelle que je n'ai aucune obligation de te répondre.

    Un programme c'est :
    1) Analyse des besoins.
    2) Conception et Architecture.
    3) Codage.
    4) Test.
    5) Livraison.

    Le code est dépendant du langage et il est expliqué pour chacun dans leur documentation. Ici sur ce forum tu as un FAQ faite pour les débutants. Tu as les bases pour commencer dedans.

    Maintenant je sens que dans ta façon de faier, tu n'as pas toute la logique nécessaire pour faire le programme. Donc je te propose une méthode pour l'obtenir.

    Maintenant si t'en veux pas alors tant pis pour toi, je me la garde pour moi, et débrouilles toi tout seul.

  8. #8
    Membre averti
    Inscrit en
    Août 2007
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Août 2007
    Messages : 302
    Points : 341
    Points
    341
    Par défaut
    Salut,

    Citation Envoyé par ced600 Voir le message
    Je ne suis pas une pondeuse de code.
    moi non plus !! Alors STP essaie de faire l'effort de comprendre puis d'améliorer ceci :

    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
     
    Set ObjFSO = CreateObject("Scripting.FileSystemObject")
     
    Set objShell = CreateObject("WScript.Shell")
    Set objWshScriptExec = objShell.Exec("Cmd /c Dir *.log /b")
    Set objStdOut = objWshScriptExec.StdOut
     
    Do Until objStdOut.AtEndOfStream
       strLine = objStdOut.ReadLine
     
       If InStr(StrLine,".log") > 0 Then
          Set objFile = objFSO.OpenTextFile(StrLine, 1)
     
          Do Until objFile.AtEndOfStream
             StrTemp = objFile.ReadLine         
             If InStr(StrTemp, "Backup date:") > 0 Then
                VVal0 = InStr(StrTemp, "<")
                XDte = Mid(StrTemp, VVal0 + 1, 19)
             Else
                If InStr(StrTemp, "Total size of the backup : <<") > 0 Then
                   VVal0 = InStr(StrTemp, "<<")
                   VVal1 = InStr(StrTemp, " Mb>>")
                   XSize = Mid(StrTemp, VVal0 + 2, VVal1 - VVal0 - 1)             
                End If
     
             End If
             If XDte <> "" And XSize <> "" Then
                XZne = XZne & strLine & ";" & XDte & ";" & XSize & vbCrLf
                XDte = ""
                XSize = ""
             End If
          Loop       
       End If
    Loop
     
    Fic = "Recap.Csv"
    If ObjFso.FileExists(Fic) Then
       ObjFso.DeleteFile(Fic)
    End If
     
    Set objFile = objFSO.OpenTextFile(Fic, 2, True)
    objFile.writeline XZne
    C'est pas optimisé c'est fait au plus simple à mon p'tit niveau...
    Copie le code dans un .Vbs situé dans le même répertoire que tes logs et lance le. Comme maintenant tu as bien compris ce que fait ce script, tu sais où récupérer tes infos.

    A++

  9. #9
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Citation Envoyé par pantere Voir le message
    En plus ça doit etre fonctionnel pour la fin de la semaine sinon le chef ne va pas être content...
    Celui qui se met dans une situation intenable ne doit pas reporter son manque de gestion sur les autres!

    Tout le monde, ici, est bénévole et la grande majorité a son propre boulot à fournir.

    Merci d'en tenir compte.

  10. #10
    Futur Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup de ton aide RadPAT et le temps que tu as voulu consacré avec le code ( comme Bbil d'ailleurs )
    Et les autres je ne dirais qu'une chose : c'est facile de balancer des phrases philosophiques mais c'est pas ça "apporter une aide" ...

  11. #11
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Il n'y a strictement rien de philosophique dans mes phrases.
    Au contraire de ce que tu as écrit, je t'ai aidé. Mais si tu ne veux pas le comprendre c'est ton problème.
    Et puisque tu n'apprécies aps mon aide, je ne répondrais à aucun autre message de ta part.

  12. #12
    Futur Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 12
    Points : 5
    Points
    5
    Par défaut Tu es un chef !
    RadPAT , je te remercie du fond du coeur, j'ai copié ton code et c'est encore mieux que ce que j'espérais ( et aussi le fichier csv consultable avec excel ! )
    Merci encore , MERCI MERCI ! TU ES UN CHEF !
    Respect , ça c'est de l'aide vraiment

  13. #13
    Membre averti
    Inscrit en
    Août 2007
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Août 2007
    Messages : 302
    Points : 341
    Points
    341
    Par défaut
    Merci de me remercier,

    mais sache quand même que j'apprécie peu ce genre de remarque :

    Citation Envoyé par pantere Voir le message
    c'est facile de balancer des phrases philosophiques mais c'est pas ça "apporter une aide" ...
    tu es jeune sur ce forum mais si tu consultes les historiques tu constateras que CED600 est une personne qui passe énormément de temps à aider les autres et que son post n'était pas de la philosophie mais bel et bien la vrai démarche pour y arriver qu'on te demandera en milieu professionnel.
    Maintenant, si je t'ai aidé c'est aussi pour m'auto former à partir d'un exemple concret et utile pour quelqu'un et que j'espère sincèrement pour toi que ce bout de code t'aidera à progresser.
    Voilà c'est dit.

    A++

  14. #14
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Merci du soutiens j'apprecie

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

Discussions similaires

  1. Copier un fichier dans un répertoire
    Par soft damsel dans le forum Langage
    Réponses: 2
    Dernier message: 14/02/2006, 16h02
  2. compter le nombre de fichiers dans un répertoire !
    Par lehic dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 20/11/2005, 17h59
  3. Gestion de fichiers dans un répertoire
    Par rossy dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 18/11/2005, 15h38
  4. rechercher d'un nom de fichier dans un répertoire
    Par yerome dans le forum Langage
    Réponses: 7
    Dernier message: 21/07/2005, 11h54
  5. Réponses: 4
    Dernier message: 22/12/2003, 11h12

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