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 :

Lire fichier texte à partir d'une ligne spécifique


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 Lire fichier texte à partir d'une ligne spécifique
    Bonjour,

    Je cherche en vain comment lire un fichier texte à partir d'une ligne spécifique, et ensuite récupérer son contenu dans une variable.

    J'ai mon fichier texte de la forme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    From:adresse@domaine
    To:adresse@domaine
    Subject:Test
    Bonjour,
     
    Test.
     
    Cordialement.
    Donc ce que je veux récupérer dans une variable, se trouve à partir de la ligne 4, c'est à dire le message du mail.

    J'ai déjà un code qui me récupère ce qu'il y a sur les 3 premières lignes:

    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
     
    Dim sRep 
    sRep = "C:\Users\Test\" 
    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)
          For k = 0 to 3
           aBuffer = Split(oTFile.ReadLine, ":")
           aData(i,k) = aBuffer(1) 
          Next
          i = i + 1
       Next
    End Function 
     
    ReadData(sRep)
    For j = 0 to UBound(aData)
    vExpediteur = aData(j,0)
    vDest = aData(j,1)
    vSujet = aData(j,2)
    Next
    Merci d'avance pour votre aide.

  2. #2
    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
    J'ai trouvé une solution sur un autre forum mais je suis un peu dans le brouillard:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Just add a loop after you open the file and throw away the first five lines.
     
    'Assuming your file stream is called oFileIn...
     
    Dim i
    For i = 1 To 5
      oFileIn.ReadLine
    Next
    J'ai compris qu'il saute les 5 premières, il lit la ligne suivante et il retourne une chaine. Mais comment je récupère cette chaîne?

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

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 415
    Points : 5 805
    Points
    5 805
    Par défaut
    Si tu veux récupérer le contenu du fichier à partir de la ligne 4, tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    set fso=CreateObject("Scripting.FileSystemObject")
    set oFich=fso.OpenTextFile("Monfichier",1,True)
    tx=oFich.ReadAll
    oFich.Close    ' On ferme le fichier après en avoir lu le contenu
    tb=Split(tx,VbNewline)
    For i=3 To Ubound(tb) ' On commence à 3 qui correspond à la 4ème ligne  
                          ' puisque le premier index du tableau (tb) est 0(zéro)
      S=S+tb(i)+Vbnewline
    Next
    'Affichage du résultat
    MsgBox s
    ' Nettoyage 
    Set oFich = Nothing
    Set fso = Nothing
    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

  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
    Citation Envoyé par l_autodidacte Voir le message
    Si tu veux récupérer le contenu du fichier à partir de la ligne 4, tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    set fso=CreateObject("Scripting.FileSystemObject")
    set oFich=fso.OpenTextFile("Monfichier",1,True)
    tx=oFich.ReadAll
    oFich.Close    ' On ferme le fichier après en avoir lu le contenu
    tb=Split(tx,VbNewline)
    For i=3 To Ubound(tb) ' On commence à 3 qui correspond à la 4ème ligne  
                          ' puisque le premier index du tableau (tb) est 0(zéro)
      S=S+tb(i)+Vbnewline
    Next
    'Affichage du résultat
    MsgBox s
    ' Nettoyage 
    Set oFich = Nothing
    Set fso = Nothing
    Merci pour ton aide, ça marche bien. J'ai juste un petit problème, j'ai intégré ton code dans la boucle de ma fonction "ReadData" afin de récupérer le message de chaque mail qui se trouve dans le répertoire "sRep".

    Le problème, c'est qu'au final les messages que j'ai récupéré de chaque fichier se réunissent et donc dans chaque mail envoyé se trouve tous les messages.

    Donc je suppose qu'il faut je sépare ton code de ma fonction "ReadData" et que je crée une autre boucle afin de lire chaque fichier se trouvant dans le répertoire. Je ne sais pas si c'est compréhensible ^^.

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

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 415
    Points : 5 805
    Points
    5 805
    Par défaut
    Il suffit de mettre juste au début de chaque itération.
    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

  6. #6
    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 l_autodidacte Voir le message
    Il suffit de mettre juste au début de chaque itération.
    Merci beaucoup, je récupère bien mes messages. Je tenais à vous précisez que je débute sur le VBS, c'est pour quoi je suis ici .

    J'ai un dernier problème. J'utilise 2 tableaux : UBound(aData) pour les 3 premières valeurs et UBound(tb) pour les valeurs à partir de la ligne 4.

    Je récupère bien mes valeurs, le problème qui se pose c'est que pour envoyer les mails j'utilise une boucle For avec le tableau UBound(aData) comme 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
    43
    44
    Function ReadData(sRep)
      Dim oFiles,oFile,oTFile,i,k,aBuffer
      Set oFiles = oFso.GetFolder(sRep).Files
      ReDim aData(oFiles.Count - 1,4)
      i = 0
      For Each oFile In oFiles
     
    		Set oTFile = oFso.OpenTextFile(oFile.Path, ForReading)
    		s = ""
     
    		For k = 0 to 2
    			aBuffer = Split(oTFile.ReadLine, ":")
    			aData(i,k) = aBuffer(1) 		
    		Next
    		i = i + 1
     
    		Set fso = CreateObject("Scripting.FileSystemObject")
    		Set oFich = fso.OpenTextFile(oFile.Path, 1,True)
    		tx = oFich.ReadAll
    		oFich.Close    ' On ferme le fichier après en avoir lu le contenu
    		tb = Split(tx,VbNewline)
    		For h = 3 To UBound(tb) ' On commence à 3 qui correspond à la 4ème ligne  
    								' puisque le premier index du tableau (tb) est 0(zéro)
    			S = S+tb(h)+Vbnewline
    		Next
     
    		' Affichage du résultat
    		MsgBox s
    		vMsg = s
    		' Nettoyage 
    		Set oFich = Nothing
    		Set fso = Nothing
     
    	Next
    End Function
     
    ReadData(sRep)
    For j = 0 to UBound(aData)
    	' MsgBox aData(j,0) & " " &  aData(j,1) & " " &  aData(j,2) & " " &  aData(j,3)
    	' Assignation des variables
    	vExpediteur = aData(j,0)
    	vDest = aData(j,1)
    	vSujet = aData(j,2)
    ....
    Et ce que je fait ensuite cest de mettre : vMsg = s
    Mais bien entendu ceci me donne la dernière valeur récupérée, donc est-il possible de fusionner les deux tableaux ou vu que que le MsgBox me récupère bien chaque message est-il possible de les réutiliser dans mon tableau UBound(aData)?

  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
    Sinon je pensais mettre la variable tb en tant que tableau dynamique de la même façon que "aData" mais je ne sais pas comment modifier cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    s = s+bBuffer(h)+VbNewline
    Voici ce que je fais ... j'espère ne pas trop confondre les 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
    Set fso = CreateObject("Scripting.FileSystemObject")
    		Set oFich = fso.OpenTextFile(oFile.Path, 1,True)
    		tx = oFich.ReadAll
    		ReDim tb(oFiles.Count - 1,4)
    		oFich.Close    ' On ferme le fichier après en avoir lu le contenu
    		bBuffer = Split(tx,VbNewline)
    		For h = 3 To UBound(tb) ' On commence à 3 qui correspond à la 4ème ligne  
    								' puisque le premier index du tableau (tb) est 0(zéro)
     
    			s = s+bBuffer(h)+VbNewline
    			tb(i,h) = bBuffer(1)
    			vMsg = tb(i,0)
    		Next
     
    		' Affichage du résultat
    		MsgBox s
     
    		' Nettoyage 
    		Set oFich = Nothing
    		Set fso = Nothing

  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 l_autodidacte Voir le message
    Il suffit de mettre juste au début de chaque itération.
    Est ce que tu aurais une idée afin que je puisse mettre la variable "s" dans un tableau dynamique?

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 08/04/2013, 17h36
  2. Réponses: 0
    Dernier message: 09/06/2011, 15h50
  3. Compter les lignes d'un fichier CSV à partir d'une ligne
    Par miniRoshan dans le forum Général Java
    Réponses: 6
    Dernier message: 03/06/2010, 11h16
  4. Réponses: 13
    Dernier message: 23/09/2008, 15h51
  5. Effacer le contenu d'un fichier a partir d'une ligne
    Par localhost dans le forum Linux
    Réponses: 3
    Dernier message: 04/04/2004, 04h47

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