Appliquer un code à plusieurs fichiers txt d'un meme repertoire

marco1980 Messages postés 9 Date d'inscription vendredi 29 septembre 2006 Statut Membre Dernière intervention 9 novembre 2006 - 3 oct. 2006 à 15:49
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 - 4 oct. 2006 à 11:24
Bonjour à tous,
je viens d'établir un premier cde en VB avec lequel je transforme un fichier .txt dans un format désiré, c'est-à-dire qu'il me permet de ne selectionner que certaines lignes, certains champs,etc.
Je suis en possession de plusieurs fichiers à transformer de la meme facon.
Or ce code ne me permet d'effectuer la transformation qu'à un seul fichier .txt.
Comment faire pour traiter avec ce code une multitude de fichiers .txt d'un meme répertoire et de renvoyer les résultats dans un unique fichier .txt. Chaque fichier traité correspondrait ainsi à une nouvelle ligne du fichier .txt créé.
Tout ceci dans le but de pouvoir ensuite créer une base de donnée avec les resultats bien ordonnés présents dans mon nouveau fichier.txt
Je glisse ci joint le code permettant de modifier mon fichier source .txt, largement inspiré de celui proposé par GeorgesDeLaJungle!! (Merci à lui)
Marco

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim fichier As New IO.StreamReader("c:\toto.txt")       'ouverture du fichier
        Dim lignelue As String = fichier.ReadLine()             'lecture de la première ligne
        Dim ligneout As String
        'Dim ligne() As String
        'ReDim ligne(1)

        Dim file As System.IO.StreamWriter
        file = My.Computer.FileSystem.OpenTextFileWriter("c:\toto1.txt", True)  ' creation du fichier en écriture toto1

        Dim i As Integer                                        'creation d'un compteur
        i = 1
        While Not (lignelue Is Nothing)                         'boucle de lecture
                      If i 2 Or i 4 Or i = 5 Or i = 11 Or i = 12 Or i = 13 Or i = 14 Or i = 15 Or i = 16 Or i = 17 Or i = 19 Or i = 26 Or i = 27 Or i = 28 Or i = 31 Or i = 32 Or i = 33 Or i = 34 Or i = 35 Or i = 37 Or i = 40 Or i = 41 Or i = 42 Or i = 43 Or i = 44 Then

                If i = 2 Then

                    ligneout = Mid(lignelue, 51, 61)                'on conserve de la 2ième ligne les caracteres du 51ième au dernier
                Else
                    ligneout = Mid(lignelue, 1, 9)                  'on conserve les neuf premiers caractères de chaque ligne
                End If

                file.Write(ligneout & ";")

            End If

                lignelue = fichier.ReadLine()
                i = i + 1
        End While

        fichier.Close()                                         'fermeture du fichier

        file.Close()                                              'fermeture du fichier en écriture

    End Sub
End Class

4 réponses

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
3 oct. 2006 à 16:04
Salut,


Note pour plus tard: = > POSTER EN .NET et pas en VB6
Fais toi une fonction qui traite un fichier: du style (attention je ne suis pas cale en .NET c'est juste pour te donner une idee

 Private Sub TraiteFichier(ByVal NomFichier As String, ByRef File As System.IO.StreamWriter) 
    Dim fichier As New IO.StreamReader(NomFichier)        'ouverture du fichier
    Dim lignelue As String = fichier.ReadLine()              'lecture de la première ligne
        Dim ligneout As String 

        Dim i As Integer                                         'creation d'un compteur
        i = 1 
        While Not (lignelue Is Nothing)                          'boucle de lecture

            If i = 2 Or i = 4 Or i = 5 Or i = 11 Or i = 12 Or i = 13 Or i = 14 Or i = 15 Or i = 16 Or i = 17 Or i = 19 Or i = 26 Or i = 27 Or i = 28 Or i = 31 Or i = 32 Or i = 33 Or i = 34 Or i = 35 Or i = 37 Or i = 40 Or i = 41 Or i = 42 Or i = 43 Or i = 44 Then 
                If i = 2 Then 
                    ligneout =  Mid (lignelue, 51, 61)                
                      'on conserve de la 2ième ligne les caracteres du 51ième au dernier
                Else 
                    ligneout  = Mid(lignelue, 1, 9) 
                     'on conserve les neuf premiers caractères de chaque ligne
               End If 
                File.Write (ligneout & ";") 
            End If 
                lignelue = fichier.ReadLine() 
                i = i + 1 
        End While 
        fichier.Close()                                          'fermeture du fichier
End Sub 





Et ensuite tu fais une boucle pour chaque fichier du répertoire.

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 

Dim File As System.IO.StreamWriter 

File = My.Computer.FileSystem.OpenTextFileWriter("c:\toto1.txt", True)   




For Each StrFile In Rep.Files 
    Call TraiteFichier(StrFile.Name, File)

Next 
 






File.Close() 
End Sub 



 
Je vais te faire un exemple en VB6 mais essaie déjà avec cette idée.






@+,   Ju£i?n
0
marco1980 Messages postés 9 Date d'inscription vendredi 29 septembre 2006 Statut Membre Dernière intervention 9 novembre 2006
4 oct. 2006 à 07:43
Salut,
apres une soirée de réflexion je trébuche sur un certain point que je n'arrive pas à résoudre.
Dans:

For Each StrFile In Rep.Files 
    Call TraiteFichier(StrFile.Name, File)
 

StrFile représente surement les fichiers TXT contenus dans le répertoire Rep
Comment déclarer StrFile?
Comment déclarer Rep?
Que sont les fonctions les fonctions .files et . Name et comment les utilise-ton de manière rigoureuse?

Je n'ai rien trouvé dans le documentation en ligne qui puisse m'aider à résoudre ces problèmes de débutant.
Merci de donner suite à mes questions.
Marco
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
4 oct. 2006 à 11:19
Salut,


Il est vrai que mon exemple est mal fait.


En fait il faudrait que Rep soit de type Folder (je ne connais pas l'équivalent en .NET)
Et que StrFile soit de Type File

Un Objet Folder contient une collection Files contant les objets de type File Soit en francais Un Répertoire contient une liste de fichier.

En VB6 On peut utiliser la boucle suivant pour afficher le nom des fichiers contenu dans un répertoire.




Dim Fso As New FileSystemObject 
Dim Rep As Folder 
Dim StrFile As File 

Dim CheminRep As String 
CheminRep =  "C:" 

'Recuperation du repertoire
Set Rep = Fso.GetFolder(CheminRep) 

'Boucle qui affiche tout les nom de fichier contenu
'Dans la collection "Files" representant les fichiers
'Du repertoire ICI C:\
For Each StrFile In Rep.Files 
    Call  MsgBox (StrFile.Name) 
Next 

Set Rep  = Nothing 
Set StrFile = Nothing 
Set Fso = Nothing 
 







<small> Coloration syntaxique automatique [AFCK]</small>

       





Peu etre qu il ne manque pas beaucoup de chose pour l'adapter a .NET, peu etre que le FileSystemObject (Microsoft Scripting Runtime) et aussi utilisable en .NET.
Mais de ce cote la helas je ne peut pas beaucoup plus t'aider.

Peu etre peut tu essayer d'aller faire un tour sur www.codyx.org pour trouver des petits bouts de code utiles en .NET

Tiens moi au courant






@+,   Ju£i?n
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
4 oct. 2006 à 11:24
Re,


Tiens va voir aussi ce lien : http://faqvbnet.developpez.com/






@+,   Ju£i?n
0
Rejoignez-nous