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

VB.NET Discussion :

Traitement d'un fichier texte [Débutant]


Sujet :

VB.NET

  1. #1
    Membre habitué Avatar de Savak
    Homme Profil pro
    Ingénieur Etude et Développement
    Inscrit en
    Avril 2012
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur Etude et Développement

    Informations forums :
    Inscription : Avril 2012
    Messages : 111
    Points : 198
    Points
    198
    Par défaut Traitement d'un fichier texte
    Bonjour,

    Voilà mon problème : je doit modifier un fichier texte de 80 Megas. Je vous laisse imaginer le nombre de ligne...

    En gros, à partir d'une certaine ligne (La ligne "[CONSULT]" pour être exact), il faut que je rajoute une ligne après chaque ligne "<ID>un numéro</ID>". Cette ligne à ajouter est la suivante : "<MEDECIN>2</MEDECIN>"

    Voici le code que j'ai créé pour faire ce que j'ai décris ci-dessus :

    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
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
     
            Dim Ligne As String
            Dim SR As New StreamReader(TextBox1.Text)
            Dim depart As Boolean = False
     
            Do Until SR.Peek = -1
     
                Ligne = SR.ReadLine()
                File.AppendAllText(TextBox1.Text & " traité.txt", Ligne & vbNewLine)
     
                If Ligne.Contains("[CONSULT]") Then
                    depart = True
                End If
     
                If depart = True And Ligne.Contains("<ID>") = True Then
                    File.AppendAllText(TextBox1.Text & " traité.txt", "<MEDECIN>2</MEDECIN>" & vbNewLine)
                End If
     
            Loop
     
            SR.Close()
     
            MsgBox("Traitement terminé")
     
        End Sub
    Après traitement du fichier, deux soucis surviennent :
    - Une ligne "<MEDECIN>2</MEDECIN>" est créé tout à la fin du fichier alors que la ligne précédente est "[END EXPORT]"
    - Toutes les lettres avec des accents (ex : é, è, à, etc.) sont remplacées par le symbole suivant : �

    Le but de ce post est de m'aider à identifier la source de ces deux erreurs.

    Merci d'avance pour votre aide. Et n'hésitez surtout pas à me dire si je n'es pas été clair. J'ai tendance à m'embrouiller dans mes explications...

  2. #2
    Membre averti Avatar de Vince
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    369
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 369
    Points : 366
    Points
    366
    Par défaut
    Citation Envoyé par Savak Voir le message
    - Une ligne "<MEDECIN>2</MEDECIN>" est créé tout à la fin du fichier alors que la ligne précédente est "[END EXPORT]"
    Normal le mode append permet d'écrire à la "fin du fichier" comme pour un log par exemple.

    Dans ton cas tu dois ouvrir un Streamreader qui lit le fichier d'entrée et un streamwriter qui réécrit le fichier modifié, ensuite tu supprime le fichier d'entrée (tu peux en faire un .bak au cas où) et tu l'écrase avec le nouveau généré et modifié.
    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
    24
    25
     
    Dim strLigne As String
    Dim monStreamReader As New System.IO.StreamReader(<chemin fichier d entrée>, System.Text.Encoding.Default) 'Stream pour lire le fichier d'entrée
    Dim monStreamWriter As New System.IO.StreamWriter(<chemin du fichier de sortie>) 'Stream pour l ecriture
     
    Do
         'Lecture fichier d'entrée
         strLigne = monStreamReader.ReadLine
     
         If strLigne Is Nothing Then
              Exit Do
         End If
     
         if strLigne = ... then
              strLigne  = strLigne + "..."
         end if
     
         'Ecriture du fichier de sortie
         monStreamWriter.WriteLine(strLigne)
         monStreamWriter.Flush()
     
    Loop Until strLigne Is Nothing
     
    monStreamReader.Close()
    monStreamWriter.Close()
    Et à la fin tu écrase ton fichier d'entrée avec celui que tu as réécris

  3. #3
    Membre habitué Avatar de Savak
    Homme Profil pro
    Ingénieur Etude et Développement
    Inscrit en
    Avril 2012
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur Etude et Développement

    Informations forums :
    Inscription : Avril 2012
    Messages : 111
    Points : 198
    Points
    198
    Par défaut
    Hum... Ok pour la méthode "Append". En effet, en y regardant de plus près, le fait que cette ligne soit rajouté à la toute fin du fichier est totalement normal.

    Par contre, ce que tu me dit là ne répond pas à mon second problème. Tu me dis qu'il y a une autre méthode pour jouer avec un fichier texte, d'accord. Mais en quoi cela va m'aider à comprendre pourquoi ce symbole bizarre (�) vient m'embêter? Ou alors cela a un lien avec la classe "File"? Je n'ai pas trop compris pourquoi tu m'as parlé des StreamReader et StreamWriter... Mon programme fonctionne mais mes lettres à accent sont remplacées, c'est tout.

    Merci d'éclairer ma lanterne!

  4. #4
    Membre habitué Avatar de Savak
    Homme Profil pro
    Ingénieur Etude et Développement
    Inscrit en
    Avril 2012
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur Etude et Développement

    Informations forums :
    Inscription : Avril 2012
    Messages : 111
    Points : 198
    Points
    198
    Par défaut
    Ça, c'est tout moi... Je parle sans savoir. Tu avais raison, en utilisant les StreamReader et StreamWriter, je ne retrouve plus de symbole à la place de mes lettres à accent.

    Voici mon 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
    22
    23
    24
    25
            Dim strLigne As String = String.Empty
            Dim monStreamReader As New System.IO.StreamReader(TextBox1.Text, System.Text.Encoding.Default)
            Dim monStreamWriter As New System.IO.StreamWriter(TextBox1.Text & " traité.txt")
            Dim depart As Boolean = False
     
            Do Until monStreamReader.Peek = -1
                'Lecture fichier d'entrée
                strLigne = monStreamReader.ReadLine()
     
                If strLigne.Contains("[CONSULT]") = True Then
                    depart = True
                End If
     
                If depart = True And strLigne.Contains("<ID>") = True Then
                    strLigne = strLigne & vbNewLine & "<MEDECIN>2</MEDECIN>"
                End If
     
                'Ecriture du fichier de sortie
                monStreamWriter.WriteLine(strLigne)
                monStreamWriter.Flush()
     
            Loop
     
            monStreamReader.Close()
            monStreamWriter.Close()
    Par contre, j'ai toujours cette ligne avec ""<MEDECIN>2</MEDECIN>" à la fin...

  5. #5
    Membre averti Avatar de Vince
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    369
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 369
    Points : 366
    Points
    366
    Par défaut
    Et si tu remets "depart" à false :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    If depart = True And strLigne.Contains("<ID>") = True Then
         strLigne = strLigne & vbNewLine & "<MEDECIN>2</MEDECIN>"
         depart = False
    End If
    OU
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    If strLigne.Contains("[CONSULT]") = True Then
         depart = True
    Else
         depart = False
    End If
    Parce que là dans ton code une fois qu'il est à Vrai il reste toujours à Vrai...


    Puis ton code tu peux l'écrire plus simplement sans booléen :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
         If strLigne.Contains("[CONSULT]") And strLigne.Contains("<ID>") Then
              strLigne = strLigne & vbNewLine & "<MEDECIN>2</MEDECIN>"
         End If

  6. #6
    Membre habitué Avatar de Savak
    Homme Profil pro
    Ingénieur Etude et Développement
    Inscrit en
    Avril 2012
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur Etude et Développement

    Informations forums :
    Inscription : Avril 2012
    Messages : 111
    Points : 198
    Points
    198
    Par défaut
    Non, aucune des deux solution ne fonctionne. Mais ne t'embête pas trop. Je peux toujours intervenir manuellement pour la dernière ligne, ce n'est pas trop gênant.

    Par contre, c'est vrai que je peux le simplifier . Je fais ça de suite!

    Merci en tout cas, tu m'as déjà bien aidé!

  7. #7
    Membre averti Avatar de Vince
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    369
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 369
    Points : 366
    Points
    366
    Par défaut
    De rien, si tu pouvais cliquer sur de mes posts

  8. #8
    Membre habitué Avatar de Savak
    Homme Profil pro
    Ingénieur Etude et Développement
    Inscrit en
    Avril 2012
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur Etude et Développement

    Informations forums :
    Inscription : Avril 2012
    Messages : 111
    Points : 198
    Points
    198
    Par défaut
    C'est fait chef!

    Je passe la discussion en résolu.

  9. #9
    Membre averti Avatar de Vince
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    369
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 369
    Points : 366
    Points
    366
    Par défaut
    Citation Envoyé par Savak Voir le message
    C'est fait chef!

    Je passe la discussion en résolu.
    Ok merci

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

Discussions similaires

  1. requete de traitement d'un fichier texte
    Par AlternantOracle dans le forum Langage
    Réponses: 2
    Dernier message: 07/12/2009, 15h32
  2. Traitement d'un fichier texte.
    Par riou34 dans le forum 4D
    Réponses: 4
    Dernier message: 25/01/2009, 12h23
  3. traitement d'un fichier texte
    Par benselma dans le forum Général Java
    Réponses: 4
    Dernier message: 14/05/2008, 16h26
  4. Réponses: 8
    Dernier message: 14/09/2006, 16h43
  5. [INFO] Traitement d'un fichier texte
    Par doudine dans le forum API standards et tierces
    Réponses: 9
    Dernier message: 25/04/2006, 09h23

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