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 :

Lire un fichier Texte.


Sujet :

VB.NET

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 40
    Points : 40
    Points
    40
    Par défaut Lire un fichier Texte.
    Bonjour,

    Je rencontre un problème de programmation.

    Le but de mon programme est de lire deux fichiers textes. Supprimer les deux premières lignes de chaque fichiers, supprimer la dernière ligne de chaque fichier, d'effectuer un remplacement de mot et de réécrire le tout dans un autre fichier Texte pour une base de donnée.
    Je bloque dès le début du programme, lorsqu'il faut lire un fichier texte.
    Je ne me suis pas embêter, je suis allé directement sur le site de miicrosoft et voici mon code de départ:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    sub main()
    dim reader as string
    reader = my.computer.filesystem.readalltext("Mon dossier/fichier.txt")
    msgbox(reader)
    Alors, je veux bien que mon fichier fasse 50000 lignes, mais je n'ai absolument aucun résultat dans la msgbox. J'aurais voulu comprendre pourquoi.

    Pourtant, lorsque je change readlalltext par readline(), j'ai bien ma première ligne de départ, ce qui prouve que le chemin du fichier est correct.

    Auriez-vous une solution à mon problème?
    Peut être que de lire les lignes une par une serait-il meilleur?

    Merci.

    Cordialement,

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 505
    Points : 293
    Points
    293
    Par défaut
    dim reader() as string
    peut-être

  3. #3
    Membre expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Points : 3 304
    Points
    3 304
    Par défaut
    Non la fonction readalltext renvoi bien une string d'après le msdn.

    Concernant la fonction readline il est logique que tu n'ai que la première ligne de ton fichier vu qu'elle lit une ligne à la fois.

    Voici un tutoriel assez bien fait qui pourrait t'aider

    http://webman.developpez.com/article...et/file/vbnet/
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Tybbow Voir le message
    Alors, je veux bien que mon fichier fasse 50000 lignes, mais je n'ai absolument aucun résultat dans la msgbox.
    C'est bizarre, mais de toutes façons ça n'a pas vraiment de sens d'essayer d'afficher 50000 lignes dans une messagebox ! ça fait des centaines de fois la hauteur de l'écran... à mon avis c'est juste un problème d'affichage, pas un problème de lecture du fichier.

  5. #5
    Membre expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Points : 3 304
    Points
    3 304
    Par défaut
    Après un test je confirme que la lecture d'un fichier contenant 4 ou 5 lignes est correcte. Peut-être une limitation au niveau de la MessageBox
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 505
    Points : 293
    Points
    293
    Par défaut
    oui c'est vrai moi j'utilise file.readlllines

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 40
    Points : 40
    Points
    40
    Par défaut
    Merci pour vos réponses.

    C'est bizarre, mais de toutes façons ça n'a pas vraiment de sens d'essayer d'afficher 50000 lignes dans une messagebox ! ça fait des centaines de fois la hauteur de l'écran... à mon avis c'est juste un problème d'affichage, pas un problème de lecture du fichier.
    On est d'accord.

    C'est juste qu'il y a 1728 modifications a effectué dans le fichier Texte. Au lieu d'avoir des "toto", j'aurais voulu des "tata" et je pensais que de passer directement par une lecteur en "readall", cela aurait permis au programme d'aller un peu plus vite.

    C'est certainement un problème au niveau du buffer qui ne sauvegarde pas suffisamment le fichier. Car lorsque je le réécris dans un autre fichier Texte, celui-ci me renvoie 0...

    Je vous dirais demain, la manière dont j'ai procédé, j'ai certainement une technique en tête.

  8. #8
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 40
    Points : 40
    Points
    40
    Par défaut
    Alors, voici mon second code, certes un peu bizarre,mais qui normalement devrait fonctionner.
    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
     
    Dim oFSO As Scripting.FileSystemObject
            Dim oFl As Scripting.File
            Dim oflc As Scripting.File
            Dim oTxt As Scripting.TextStream
            Console.WriteLine("         By Tybbow, Version 1.0")
            Console.WriteLine("")
            Console.WriteLine("")
            Console.WriteLine("")
            Console.WriteLine("Démarrage du programme")
            Console.WriteLine("Mise en place du système de fusion")
            oFSO = New Scripting.FileSystemObject
    oflc = oFSO.CreateTextFile("/QUALITE.xml")
            Dim oTxtr = oFSO.GetFile("/QUALITE.xml")
            oTxt = oTxtr.OpenAsTextStream(Scripting.IOMode.ForWriting)
            oTxt.WriteLine("<?xml version=" & Chr(34) & "1.0" & Chr(34) & "standalone=" & Chr(34) & "yes" & Chr(34) & "?>")
            oTxt.WriteLine("<TRANSPORTER>")
            oFl = oFSO.GetFile("fichier/ABONNES.txt")
            oTxt = oFl.OpenAsTextStream(Scripting.IOMode.ForReading)
            oTxt.SkipLine()
            oTxt.SkipLine()
            With oTxt
                While Not .AtEndOfStream
                    MsgBox(oTxt)
                    Dim otxts As String = oTxt.ReadAll
                    If InStr(1, otxts, "ITEM", 1) <> 0 Then
                        Replace(otxts, "ITEM", "ITEM24")
                        System.IO.File.AppendAllText("/QUALITE.xml", otxts)
                    End If
                End While
            End With
    Je ne l'ai pas terminé, vu que j'ai une jolie erreur qui me dit que cette interface n'est pas prise en charge sur l'object, scripting.file.
    Com_object, 0x80004002.

    Quelqu'un aurait-il une idée? XD

  9. #9
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    c'est du code tout moche qui vient de vb6 à éviter

    part sur le readalltext, du replace puis writealltext
    ce n'est pas le plus performant, mais pour des petits fichiers c'est insignifiant

    le stringbuilder sera surement plus rapide pour du replace
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  10. #10
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 40
    Points : 40
    Points
    40
    Par défaut
    Merci de la réponse
    je ne connaissais même pas le StringBuilder. Je viens d'un monde un peu différent, je viens du monde de VBS.
    En VBS, je l'aurais déjà fini depuis longtemps, mais je pense que lorsque l'on connait bien les outils du vb.net, on peut certainement faire des choses plus poussé.

    Sinon, j'ai modifié mon code, mais j'ai toujours la même erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Dim oflc As Scripting.File = oFSO.CreateTextFile("QUALITE.txt")
            Dim oTxtr = oFSO.GetFile("QUALITE.txt")
            oTxt = oTxtr.OpenAsTextStream(Scripting.IOMode.ForWriting)
            oTxt.WriteLine("<?xml version=" & Chr(34) & "1.0" & Chr(34) & "standalone=" & Chr(34) & "yes" & Chr(34) & "?>")
            oTxt.WriteLine("<TRANSPORTER>")
            Dim oFl As Scripting.File = oFSO.GetFile("fichier/ABONNES.txt")
            oTxt = oFl.OpenAsTextStream(Scripting.IOMode.ForReading)
            Dim oTxl = oTxt.ReadAll
            oTxt.Close()
            Dim replac = Replace(oTxl, "ITEM", "ITEM24")
            oTxt = oFl.OpenAsTextStream(Scripting.IOMode.ForAppending)
            oTxt.Write(oTxl)
            oTxt.Close()

  11. #11
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    il faut oublier scripting.file et tout ce qui vient de vb6 ou de vbs

    system.io contient tout ce qu'il faut pour utiliser des fichiers
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  12. #12
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 40
    Points : 40
    Points
    40
    Par défaut
    Okay, je fais le test demain, je vous tiens au nouvelle ^^

  13. #13
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 40
    Points : 40
    Points
    40
    Par défaut
    Re.

    Alors, comme la suggérer pol63, je suis passé dans le système system.io qui me paraît complet.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dim oText as new Streamrider("Abonnes.txt")
    Dim eText as new streamwriter("abonnes.xml")
    Dim read = oText.ReadToEnd()
    Dim Repla = line.Replace("ITEM", "ITEM24")
    eText.write(Repla)
    msgbox("fusion terminée")
    Vous l'aurez compris, pour le moment, j'effectue seulement une modification.
    Cependant, le programme ne fonctionne qu'à moitié. En effet, le programme n'arrive pas à tout me réécrire. Il s'arrête à 651264 caractères. Je pense que c'est un problème de buffer, mais je ne sais absolument pas comment régler ce problème.

    Je remercie la personne qui pourra trouver une solution.

  14. #14
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 505
    Points : 293
    Points
    293
    Par défaut
    je m'excuse mais je comprend pas ton code

  15. #15
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 40
    Points : 40
    Points
    40
    Par défaut
    Ah bon?

    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
     
    '// J'ouvre le fichier abonnes.txt en mode lecture.
    Dim oText as new Streamrider("Abonnes.txt")
     
    '// J'ouvre le fichier abonnes.xml en mode écriture.
    Dim eText as new streamwriter("abonnes.xml")
     
    '//Je lis tout le fichier abonnes.txt du débit à la fin.
    Dim read = oText.ReadToEnd()
     
    '//Je remplace tous les mots ITEM en ITEM24.
    Dim Repla = line.Replace("ITEM", "ITEM24")
     
    '//On réécrit tout le fichier dans abonnes.xml
    eText.write(Repla)
     
    '//On affiche un message.
    msgbox("fusion terminée")

  16. #16
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 505
    Points : 293
    Points
    293
    Par défaut
    Line.replace il y a quoi dans ta line ?

  17. #17
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 40
    Points : 40
    Points
    40
    Par défaut
    Ah mince, autant pour moi.

    Dim line = oText.ReadToEnd()

  18. #18
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 505
    Points : 293
    Points
    293
    Par défaut
    Je te suggère de lire le fichier PDF de philippe Lasserre c'est une vrai petite bible du VB

    Laisse tomber tes notions de VB6 et apprend à refaire tes exercices en VB car il faut corriger tes erreurs de codages et c'est pas évident

  19. #19
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 40
    Points : 40
    Points
    40
    Par défaut
    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
     
    '// J'ouvre le fichier abonnes.txt en mode lecture.
    Dim oText as new Streamrider("Abonnes.txt")
     
    '// J'ouvre le fichier abonnes.xml en mode écriture.
    Dim eText as new streamwriter("abonnes.xml")
     
    '//Je lis tout le fichier abonnes.txt du débit à la fin.
    Dim lecture = oText.ReadToEnd()
     
    '//Je remplace tous les mots ITEM en ITEM24.
    Dim Repla = lecture.Replace("ITEM", "ITEM24")
     
    '//On réécrit tout le fichier dans abonnes.xml
    eText.write(Repla)
    Je ne vois pas trop l'erreur de codage puisque cela fonctionne. Hormis que je n'ai pas tout le Texte.

    De plus, je n'ai aucune notion en VB6 :d

  20. #20
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dim contenu as string = system.io.file.readalltext("Abonnes.txt")
    contenu = contenu.Replace("ITEM", "ITEM24")
    system.io.file.writealltext("abonnes.xml", contenu)
    normalement aucun soucis avec ce code

    après il y a aussi des classes pour manipuler de l'xml dans le framework
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/12/2005, 15h57
  2. [Applet] lire un fichier texte
    Par lebesnec dans le forum Applets
    Réponses: 2
    Dernier message: 07/07/2005, 10h09
  3. Réponses: 1
    Dernier message: 24/11/2004, 16h54
  4. [Fichier] Lire un fichier texte long
    Par _Eric_ dans le forum Entrée/Sortie
    Réponses: 9
    Dernier message: 18/08/2004, 15h22
  5. Réponses: 2
    Dernier message: 26/05/2004, 17h53

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