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 :

Vbs export sélectif fichier txt et importation dans un fichier existant


Sujet :

VBScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2016
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2016
    Messages : 29
    Par défaut Vbs export sélectif fichier txt et importation dans un fichier existant
    Bonjour,

    J'utilise le gestionnaire de ressources du serveur de fichiers sur Windows 2012 R2.
    J'exporte les quotas depuis cet utilitaire et souhaite extraire certaines données pour les injecter dans un autre fichier.

    L'export se fait eu format txt avec cette structure :

    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
    "Quota Usage Report"
     
     
    Generated at: "31/08/2016 10:34:18"
     
    "Lists the quotas that exceed a certain disk space usage level. Use this report to quickly identify quotas that may soon be exceeded so that you can take the appropriate action."
     
    Report settings: 
    Machine: ,"SRV-BACKUP1"
    Report Folders: ,"D:\",
    Parameters: ,"Minimum Quota used percent: 0%"
     
     
    Report Totals
    Files shown in the report
    Quotas,Quota Usage
    "29","601,036 MB"
    All files matching report criteria
    Quotas,Quota Usage
    "29","601,036 MB"
     
     
    Report statistics
    Folder,Owner,Quota,Usage,Percent Used(%),Peak Usage,Peak Usage Time
    "d:\dossier1","BUILTIN\Administrators","51,200 MB","51,295 MB","100.18" %,"51,357 MB","22/08/2016 22:47:55"
    "d:\dossier2","BUILTIN\Administrators","61,440 MB","58,840 MB","95.77" %,"65,394 MB","21/07/2016 17:11:55"
    "d:\dossier3","BUILTIN\Administrators","133,120 MB","120,577 MB","90.58" %,"239,457 MB","23/08/2016 22:42:12"
    "d:\dossier4","BUILTIN\Administrators","8,192 MB","7,306 MB","89.19" %,"10,723 MB","22/08/2016 17:15:48"
    C'est un exemple car j'ai beaucoup plus que 4 dossiers.

    J'aimerai extraire ces valeurs sous la forme :
    [Folder] quota de [Usage/1024] Gb utilisé à [Percent Used] %
    dans cet exemple, cela donnerai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    d:\dossier1 quota de 50 Gb utilisé à 100.18 %
    d:\dossier2 quota de 60 Gb utilisé à 95.77 %
    d:\dossier3 quota de 120 Gb utilisé à 90.58 %
    d:\dossier4 quota de 8 Gb utilisé à 89.19 %
    J'aimerai insérer ce texte extrait à un fichier existant contenant :
    dossier1 backup success
    dossier2 backup failed
    dossier3 backup success
    dossier4 backup error

    il faudrait que je puisse insérer en bout de ligne les quota de [Usage/1024] Gb utilisé à [Percent Used] % en fonction du nom du dossierN (qui est le même que dans le fichier généré par le gestionnaire de ressources du serveur de fichiers)

    afin d'avoir :
    [dossierN] backup [resultat] quota de [Usage/1024] Gb utilisé à [Percent Used] %

    soit dans cet exemple
    dossier1 backup success quota de 50 Gb utilisé à 100.18 %

    J'espère cette fois ci avoir été assez précis dans ma demande.

    batist3

  2. #2
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 420
    Par défaut
    J'espère cette fois ci avoir été assez précis dans ma demande
    Oui un peu
    Et qui va décider de success, failed et error ?
    Le fichier résultat contient-il d'autre lignes que celles citées ?
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2016
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2016
    Messages : 29
    Par défaut
    le success ou failed est déterminé par le logiciel de sauvegarde.

    en fait, j'aimerai das un premier temps exporter les données du fichier txt [Folder] quota de [Usage/1024] Gb utilisé à [Percent Used] %
    pour les intégrer temporairement dans un fichier txt (exemple quota.txt) qui donnerai

    d:\dossier1 quota de 50 Gb utilisé à 100.18 %
    d:\dossier2 quota de 60 Gb utilisé à 95.77 %
    d:\dossier3 quota de 120 Gb utilisé à 90.58 %
    d:\dossier4 quota de 8 Gb utilisé à 89.19 %

    Une fois ce fichier généré, je supprimerai le d:\ et ajouterai au fichier principal (exemple backup.txt) les arguments quota de [Usage/1024] Gb utilisé à [Percent Used] %
    à la fin de la ligne contenant dossier1 :

    actuellement :
    OK backup dossier1 succes (ou failed) ...

    souhaité
    OK backup dossier1 success quota de 50 Gb utilisé à 100.18 %

    je souhaite copier quota de [Usage/1024] Gb utilisé à [Percent Used] % du fichier quota.txt en fin de ligne du dossierN correspondant dans le fichier backup.txt. (grace au vbs donné dans le post précédent)


    Le fichier ne contient pas d'autres lignes que celles citées.

  4. #4
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 420
    Par défaut
    Voici une esquisse du
    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
    Option Explicit 
     
    Const ForReading = 1, ForWriting = 2
     
    Dim fso, Fich1, Fich2, Ret, NewText(5), tb, tmp, I, Result,aux
     
    Set fso = CreateObject("Scripting.FileSystemObject")  
    Set fich1 = fso.OpenTextFile("Source.txt", ForReading, False) 
     
    I = 0
    Do While Not fich1.AtEndOfStream
       Ret = fich1.ReadLine
       If InStr(LCase(Ret), Chr(34) & "d:\dossier") > 0 Then
          tb = Split(Ret, Chr(34) & "," & Chr(34))
     
          tmp = (Replace(Replace(tb(2), ",", ""), "MB", ""))/1024
          aux = Replace(Mid(tb(4), 1 ,InStr(1, tb(4), "%")), Chr(34), "")  
          NewText(I) = " quota de " & CStr(tmp) & " GB utilisé à " & aux 
          I = I + 1
        End If
    Loop
    fich1.Close
     
    Result = ""
    I = 0
    Set fich2 = fso.OpenTextFile("Resultat.txt", ForReading, False)
    Do While Not fich2.AtEndOfStream
       Ret = fich2.ReadLine
       If InStr(1, Ret, "d:\") > 0 Then 
           MsgBox "Fichier déjà traité" & vbNewLine & "On quitte sans modifier le fichier résultat",vbInformation, Wscript.ScriptName
           Wscript.Quit
        End If
       Ret = "d:\" & Ret 
       Result = Result & Ret & NewText(I) & vbNewLine
       I = I + 1
    Loop
    fich2.Close
    Set fich2 = fso.OpenTextFile("Resultat.txt", ForWriting, False)
    Fich2.Write Result
    fich2.Close
    MsgBox "Opération terminée avec succès"
    Si tu as beaucoup plus de lignes à traiter, il te suffit d'augmenter la taille du tableau NewText(5) à 10 par exemple s'il y en a 11(car le premier index du tableau est zéro)
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  5. #5
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2016
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2016
    Messages : 29
    Par défaut
    merci pour ce retour

    par contre, j'ai essayé une première fois, cela a fonctionné.

    Je n'arrive plus à le faire marcher

    contenu fichier Source.txt :

    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
    "Quota Usage Report"
     
     
    Generated at: "31/08/2016 10:34:18"
     
    "Lists the quotas that exceed a certain disk space usage level. Use this report to quickly identify quotas that may soon be exceeded so that you can take the appropriate action."
     
    Report settings: 
    Machine: ,"SRV-BACKUP1"
    Report Folders: ,"D:\",
    Parameters: ,"Minimum Quota used percent: 0%"
     
     
    Report Totals
    Files shown in the report
    Quotas,Quota Usage
    "29","601,036 MB"
    All files matching report criteria
    Quotas,Quota Usage
    "29","601,036 MB"
     
     
    Report statistics
    Folder,Owner,Quota,Usage,Percent Used(%),Peak Usage,Peak Usage Time
    "d:\dossier1","BUILTIN\Administrators","51,200 MB","51,295 MB","100.18" %,"51,357 MB","22/08/2016 22:47:55"
    "d:\dossier2","BUILTIN\Administrators","61,440 MB","58,840 MB","95.77" %,"65,394 MB","21/07/2016 17:11:55"
    "d:\dossier3","BUILTIN\Administrators","133,120 MB","120,577 MB","90.58" %,"239,457 MB","23/08/2016 22:42:12"
    "d:\dossier4","BUILTIN\Administrators","8,192 MB","7,306 MB","89.19" %,"10,723 MB","22/08/2016 17:15:48"
    contenu du vbs :
    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
    Option Explicit 
     
    Const ForReading = 1, ForWriting = 2
     
    Dim fso, Fich1, Fich2, Ret, NewText(5), tb, tmp, I, Result,aux
     
    Set fso = CreateObject("Scripting.FileSystemObject")  
    Set fich1 = fso.OpenTextFile("Source.txt", ForReading, False) 
     
    I = 0
    Do While Not fich1.AtEndOfStream
       Ret = fich1.ReadLine
       If InStr(LCase(Ret), Chr(34) & "d:\dossier") > 0 Then
          tb = Split(Ret, Chr(34) & "," & Chr(34))
     
          tmp = (Replace(Replace(tb(2), ",", ""), "MB", ""))/1024
          aux = Replace(Mid(tb(4), 1 ,InStr(1, tb(4), "%")), Chr(34), "")  
          NewText(I) = " quota de " & CStr(tmp) & " GB utilisé à " & aux 
          I = I + 1
        End If
    Loop
    fich1.Close
     
    Result = ""
    I = 0
    Set fich2 = fso.OpenTextFile("Resultat.txt", ForReading, False)
    Do While Not fich2.AtEndOfStream
       Ret = fich2.ReadLine
       If InStr(1, Ret, "d:\") > 0 Then 
           MsgBox "Fichier déjà traité" & vbNewLine & "On quitte sans modifier le fichier résultat",vbInformation, Wscript.ScriptName
           Wscript.Quit
        End If
       Ret = "d:\" & Ret 
       Result = Result & Ret & NewText(I) & vbNewLine
       I = I + 1
    Loop
    fich2.Close
    Set fich2 = fso.OpenTextFile("Resultat.txt", ForWriting, False)
    Fich2.Write Result
    fich2.Close
    MsgBox "Opération terminée avec succès"
    Ca m'affiche bien "Opération terminée avec succès" mais le fichier Resultat.txt reste vide.

    J'ai également essayé avec le fichier Source.txt simplifié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    "d:\dossier1","BUILTIN\Administrators","51,200 MB","51,295 MB","100.18" %,"51,357 MB","22/08/2016 22:47:55"
    "d:\dossier2","BUILTIN\Administrators","61,440 MB","58,840 MB","95.77" %,"65,394 MB","21/07/2016 17:11:55"
    "d:\dossier3","BUILTIN\Administrators","133,120 MB","120,577 MB","90.58" %,"239,457 MB","23/08/2016 22:42:12"
    "d:\dossier4","BUILTIN\Administrators","8,192 MB","7,306 MB","89.19" %,"10,723 MB","22/08/2016 17:15:48"
    mais rien n'y fait

    je fais quelque chose de travers ?

  6. #6
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 420
    Par défaut
    Pourtant ça fonctionne parfaitement sur ma machine et quel que soit le nombre de lignes du fichier Source.txt hormis celles contenant "d:\
    On va alors procéder autrement : ajouter un flag booléen pour contrôler l'écriture dans le fichier resultat.txt :
    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
    Option Explicit 
     
    Const ForReading = 1, ForWriting = 2
     
    Dim fso, Fich1, Fich2, Ret, NewText(5), tb, tmp, I, Result, aux, Ecrire
     
    Set fso = CreateObject("Scripting.FileSystemObject")  
    Set fich1 = fso.OpenTextFile("Source.txt", ForReading, False) 
    Ecrire = True
    I = 0
    Do While Not fich1.AtEndOfStream
       Ret = fich1.ReadLine
       If InStr(LCase(Ret), Chr(34) & "d:\dossier") > 0 Then
          tb = Split(Ret, Chr(34) & "," & Chr(34))
     
          tmp = (Replace(Replace(tb(2), ",", ""), "MB", ""))/1024
          aux = Replace(Mid(tb(4), 1 ,InStr(1, tb(4), "%")), Chr(34), "")  
          NewText(I) = " quota de " & CStr(tmp) & " GB utilisé à " & aux 
          I = I + 1
        End If
    Loop
    fich1.Close
     
    Result = ""
    I = 0
    Set fich2 = fso.OpenTextFile("Resultat.txt", ForReading, False)
    Do While Not fich2.AtEndOfStream
       Ret = fich2.ReadLine
       If InStr(1, Ret, "d:\") > 0 Then 
           Ecrire = False
        Else 
           Ret = "d:\" & Ret 
           Result = Result & Ret & NewText(I) & vbNewLine
           I = I + 1
       End If
    Loop
    fich2.Close
    If Ecrire Then
        Set fich2 = fso.OpenTextFile("Resultat.txt", ForWriting, False)
        Fich2.Write Result
        fich2.Close
        MsgBox "Opération terminée avec succès", vbInformation, Wscript.ScriptName
    Else 
        MsgBox "Opération annulée car le fichier [Resultat.txt] a déjà été modifié", vbExclamation, Wscript.ScriptName
    End If
    Dans le cas où le fichier cible a été modifié, le script n'y écrit rien sinon on aurait des lignes où à chaque exécution du script l'ajout du contenu de NewText(index) , donc des lignes interminables.
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

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

Discussions similaires

  1. [Fichiers] Créer et écrire dans un fichier .txt
    Par maserati dans le forum C++
    Réponses: 3
    Dernier message: 30/11/2008, 21h02
  2. Réponses: 2
    Dernier message: 11/08/2008, 10h00
  3. récupéré une ligne dans un fichier txt pour mettre dans msgbox
    Par fabrice44 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/02/2008, 14h01
  4. Réponses: 3
    Dernier message: 01/04/2007, 13h08
  5. Réponses: 4
    Dernier message: 08/04/2006, 09h10

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