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 Lecture de plusieurs fichiers texte dans un même répertoire.


Sujet :

VBScript

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2011
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 20
    Points : 13
    Points
    13
    Par défaut VBS Lecture de plusieurs fichiers texte dans un même répertoire.
    Bonjour à tous,

    Je tiens à préciser que je suis un débutant en VBScript, mais j'en ai besoin pour un petit projet. J'ai déjà la base de mon script qui consiste à récupérer le nom de l'expéditeur, du destinataire et le sujet du mail, ceci se trouvant dans un fichier texte.
    Donc mon script récupère ces 3 éléments et les utilisent pour envoyer le mail. Pour l'instant ça fonctionne avec un fichier texte précis.

    Ce qu'il me manque et ce que je voudrais, c'est que le script fonctionne pour X fichiers dans un répertoire précis. Mais pour faire la boucle je suis un peu perdu.

    J'avais pensé faire une commande qui compte le nombre de fichier présent dans le répertoire, comme ça j'utilise cette variable pour faire une boucle FOR mais ensuite c'est un peu flou pour moi.

    Merci d'avance pour votre aide.

    voici le morceau du script qui permet de récupérer mes variables:
    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
    strSourceFile="C:\Users\Documents\script\test.txt"
     
    Const ForReading = 1, ForWriting = 2 , ForAppending = 8
     
    Set objFSo = CreateObject("Scripting.FileSystemObject")
     
    wscript.echo "vDest :" & getVariable(0) ' retourne la valeur vExpediteur
    wscript.echo "vExpediteur :" & getVariable(1)' retourne la valeur vDest
    wscript.echo "vSujet :" & getVariable(2)' retourne la valeur vSujet
    wscript.echo "vMsg :" & getVariable(3)' retourne la valeur vMsg
     
    Function getVariable(entier)
     Set f = objFSo.OpenTextFile(strSourceFile, ForReading)
       	val=f.ReadLine
    	tabFile = Split(val, ";")
    	getVariable = tabFile(entier)	
     set f = nothing 
     
    End function 
     
    vExpediteur = getVariable(0)
    vDest = getVariable(1)
    vSujet = getVariable(2)
    vMsg = getVariable(3)

  2. #2
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 840
    Points : 9 225
    Points
    9 225
    Par défaut
    Citation Envoyé par Msxty Voir le message
    Ce qu'il me manque et ce que je voudrais, c'est que le script fonctionne pour X fichiers dans un répertoire précis.

    Il y a quoi comme données dans ces fichiers . Autres informations sur " nom de l'expéditeur, du destinataire et le sujet du mail" ???

  3. #3
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 299
    Points : 3 554
    Points
    3 554
    Par défaut
    bonjour,
    que veux-tu faire exactement ?
    lire tous les fichiers d'un répertoire donné ou seulement quelques uns sur la base d'un critère précis ?

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2011
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Les fichiers sont de la forme :

    maildest@fai.fr;mailexp@fai.fr;sujet;message

    Je verrais plus tard pour changer la disposition des données à l’intérieure du fichier.

    Pour le comptage des fichiers présents j'ai déjà quelque chose à proposer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim stRep 'Nom du répertoire à parcourir
    Dim oFSO,oFl
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    stRep = "C:\Users\Documents\script\Documents" 'adresse du répertoire
    nb = oFSO.GetFolder(stRep).Files.Count
    EDIT:

    Ce que je voudrais c'est pouvoir parcourir tous les fichiers.txt d'un répertoire. Ce répertoire contient que des fichiers textes qui sont tous de la même forme.

    Chaque fichier correspond à un mail -> donc lorsque le script parcoure un fichier, il envoie un mail.

    Pour l'instant mon script me permet de lire un fichier et d'envoyer ensuite le mail.

  5. #5
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 840
    Points : 9 225
    Points
    9 225
    Par défaut
    Citation Envoyé par Msxty Voir le message
    Les fichiers sont de la forme :
    maildest@fai.fr;mailexp@fai.fr;sujet;message
    Je verrais plus tard pour changer la disposition des données à l’intérieure du fichier.
    Pour le comptage des fichiers présents j'ai déjà quelque chose à proposer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim stRep 'Nom du répertoire à parcourir
    Dim oFSO,oFl
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    stRep = "C:\Users\Documents\script\Documents" 'adresse du répertoire
    nb = oFSO.GetFolder(stRep).Files.Count
    EDIT:
    Ce que je voudrais c'est pouvoir parcourir tous les fichiers.txt d'un répertoire. Ce répertoire contient que des fichiers textes qui sont tous de la même forme.
    Chaque fichier correspond à un mail -> donc lorsque le script parcoure un fichier, il envoie un mail.
    Pour l'instant mon script me permet de lire un fichier et d'envoyer ensuite le mail.
    Vous voulez parcourir tous les fichiers dans ce répertoire, Pour faire du Mailing càd du publipostage
    vous pouvez consulter la Comment agir sur tous les fichiers d'un répertoire ?

  6. #6
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 299
    Points : 3 554
    Points
    3 554
    Par défaut
    un exemple :
    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
    Const ForReading = 1
    Dim aData()
    Set oFso = CreateObject("Scripting.FileSystemObject")
     
    Function ReadData(sRep)
      Dim oFiles,oFile,oTFile,i,k,aBuffer
      Set oFiles = oFso.GetFolder(sRep).Files
      ReDim aData(oFiles.Count - 1,3)
      i = 0
      For Each oFile In oFiles
        Set oTFile = oFso.OpenTextFile(oFile.Path, ForReading)
    	  aBuffer = Split(oTFile.ReadLine, ";")
    	  For k = 0 to UBound(aBuffer)
    	    aData(i,k) = aBuffer(k) 
    	  Next
    	  i = i + 1
      Next
    End Function 
     
    ReadData("c:\install\tt")
    For j = 0 to UBound(aData)
     MsgBox aData(j,0) & " " &  aData(j,1)
    Next
    btw, je ne sais pas où tu as trouvé ton exemple mais il n'est pas vraiment opportun d'appeler la fonction getvariable pour ne retirer qu'un élément à la fois...

  7. #7
    Membre à l'essai
    Inscrit en
    Mai 2011
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Oui je sais, je rencontre pas mal d'erreur avec cette function lorsque je compile mais c'est là seule que j'ai trouvé qui fonctionne. Il faut dire aussi que je n'ai pas cherché à en créer une.

    @hackoofr : oui c'est ce que je cherche à faire, mais quand je modifie le script ça me met tout le temps une erreur avec "function getVariable (entier)".

  8. #8
    Membre à l'essai
    Inscrit en
    Mai 2011
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par omen999 Voir le message
    un exemple :
    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
    Const ForReading = 1
    Dim aData()
    Set oFso = CreateObject("Scripting.FileSystemObject")
     
    Function ReadData(sRep)
      Dim oFiles,oFile,oTFile,i,k,aBuffer
      Set oFiles = oFso.GetFolder(sRep).Files
      ReDim aData(oFiles.Count - 1,3)
      i = 0
      For Each oFile In oFiles
        Set oTFile = oFso.OpenTextFile(oFile.Path, ForReading)
    	  aBuffer = Split(oTFile.ReadLine, ";")
    	  For k = 0 to UBound(aBuffer)
    	    aData(i,k) = aBuffer(k) 
    	  Next
    	  i = i + 1
      Next
    End Function 
     
    ReadData("c:\install\tt")
    For j = 0 to UBound(aData)
     MsgBox aData(j,0) & " " &  aData(j,1)
    Next
    btw, je ne sais pas où tu as trouvé ton exemple mais il n'est pas vraiment opportun d'appeler la fonction getvariable pour ne retirer qu'un élément à la fois...
    Merci ca fonctionne, par contre je n'ai pas tout compris tu peux m'expliquer ce que fais UBound et ReDim aData(oFiles.Count - 1,3).

  9. #9
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 299
    Points : 3 554
    Points
    3 554
    Par défaut
    Ubound
    ReDim aData(oFiles.Count - 1,3) crée un tableau à 2 dimensions, la 1ère énumère les fichiers .txt, la seconde les données de chaque fichier.
    si tu comptes mettre plus de 4 données dans chaque fichier il faudra évidemment
    agrandir d'autant le tableau

  10. #10
    Membre à l'essai
    Inscrit en
    Mai 2011
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par omen999 Voir le message
    Ubound
    ReDim aData(oFiles.Count - 1,3) crée un tableau à 2 dimensions, la 1ère énumère les fichiers .txt, la seconde les données de chaque fichier.
    si tu comptes mettre plus de 4 données dans chaque fichier il faudra évidemment
    agrandir d'autant le tableau
    D'accord merci à toi pour ces informations . J'ai une dernière question après j'arrête de t'embêter.

    Si mon fichier texte est de la forme:

    From:mailext@.fr
    To:maildest@.fr
    Subject: test

    EDIT: Désolé de t'embêter avec ça mais ce n'est pas le genre d'informations que l'on puisse trouver comme ça dans google et en ayant jamais fait de VBScript, mais j'en ai besoin pour un projet en DUT.

  11. #11
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 299
    Points : 3 554
    Points
    3 554
    Par défaut
    si le fichier comporte 4 lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    For Each oFile In oFiles
          Set oTFile = oFso.OpenTextFile(oFile.Path, ForReading)
          For k = 0 to 3
           aBuffer = Split(oTFile.ReadLine, ":")
           aData(i,k) = aBuffer(1) 
          Next
          i = i + 1
    Next
    mais j'en ai besoin pour un projet en DUT.
    on partage la note alors...

  12. #12
    Membre à l'essai
    Inscrit en
    Mai 2011
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Je te remercie omen999 ça fonctionne à merveille, et merci d'avoir pris un peu de ton temps pour me donner cette solution .

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/09/2014, 16h35
  2. ouverture d'un lot de fichier texte dans un même répertoire
    Par rom05 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/04/2008, 19h04
  3. ouvrir plusieurs fichier texte dans une seule feuille
    Par popoye dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/04/2008, 15h28
  4. Ouvrir plusieurs fichier textes dans un dossier : *texte.txt
    Par Jenn74 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/05/2007, 16h52
  5. Lecture d'un fichier texte dans un projet TOMCAT
    Par brice_nice dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 03/07/2005, 15h04

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