LIRE UN FICHIER TEXTE LIGNE PAR LIGNE EN VB.NET

jrbleboss Messages postés 480 Date d'inscription jeudi 6 mai 2004 Statut Membre Dernière intervention 3 septembre 2007 - 14 mars 2005 à 21:38
chris37000 Messages postés 42 Date d'inscription vendredi 22 décembre 2000 Statut Membre Dernière intervention 12 décembre 2017 - 26 avril 2013 à 12:24
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/30097-lire-un-fichier-texte-ligne-par-ligne-en-vb-net

chris37000 Messages postés 42 Date d'inscription vendredi 22 décembre 2000 Statut Membre Dernière intervention 12 décembre 2017
26 avril 2013 à 12:24
Merci pour le EndOfStream()

Car la fonction line is nothing a ces limites. En cas de ligne vide on sort alors qu'il reste du texte.
cs_lamrani06 Messages postés 3 Date d'inscription samedi 28 avril 2012 Statut Membre Dernière intervention 26 juillet 2012
26 juil. 2012 à 18:36
ce code me donne un erreur : Index was outside the bounds of the array.

Using flux As New StreamReader("P:\New folder\3900329287_3152012165629.ok")
While flux.EndOfStream = False
Dim Str As String = flux.ReadLine

Dim dataSource As String()
dataSource = Str.Split(New Char() {":"}, StringSplitOptions.RemoveEmptyEntries)
TextBox1.Text = dataSource(0).Trim
TextBox2.Text = dataSource(1)
TextBox3.Text = dataSource(2).Trim
TextBox4.Text = dataSource(3).Trim
TextBox5.Text = dataSource(4).Trim
TextBox6.Text = dataSource(5).Trim
TextBox7.Text = dataSource(6)
TextBox8.Text = dataSource(7)
end while
end using
SpiderTomtom Messages postés 11 Date d'inscription jeudi 23 juillet 2009 Statut Membre Dernière intervention 7 septembre 2010
23 juil. 2009 à 23:05
Bonsoir a tous,

Voila j'ai suivi le code donné en début et tout fonctionne à merveille. Seulement étant débutant, j'ai ma petite question. J'ai un fichier texte qui me sert de base de donnée. C'est pour cela que je voudrais l'inclure à "My ressources" pour qu'il ne puisse pas être modifié par un tiers. J'ai donc modifié la ligne comme ceci :

Dim monStreamReader As New StreamReader("application.My.resources.fichier.txt")

Mais lors de l'éxécution du programme, le catch prend direct le relais et m'affiche donc l'erreur.
Cela est-il possible donc de faire ainsi et si oui comment ??

Merci par avance
ZLASSI Messages postés 5 Date d'inscription mercredi 16 mai 2007 Statut Membre Dernière intervention 9 octobre 2008
9 oct. 2008 à 09:50
Bonjour à tous,

Quelqu'un peut m'aider à faire concaténer deux fichiers txt dans un nouveau fichier txt?
le contenu de a.txt et b.txt seront deplacées dans c.txt

Merci d'avance
corbamis Messages postés 1 Date d'inscription lundi 3 mai 2004 Statut Membre Dernière intervention 8 mai 2008
8 mai 2008 à 17:24
Merci SlaytanIK, j'avais le problème suivant, avec le premier exemple, à savoir la comparaison à Nothing de la ligne lue.
Si jamais la ligne lue était une ligne vide, cela mettait fin à la boucle, ce que ne fait pas le EndOfStream, justement, et permet de lire au-delà des lignes vides.
gh2005 Messages postés 1 Date d'inscription samedi 25 septembre 2004 Statut Membre Dernière intervention 8 mars 2008
8 mars 2008 à 21:19
Vous êtes tous très fort, mais côté VB.NET, je me contente de m'instruire.
Alors, les mêmes excellents conseils, mais pour les
FICHIERS DIRECTS (sans problème en VB6)
raviraient le vieil homme que je suis... devenu.
Merci à tous !
Nestorius
SlaytanIK Messages postés 3 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 29 février 2008
29 nov. 2007 à 11:36
Voila l'equivalent de EOF en .NET c'est : .EndOfStream

CODE :

'Verification de l'existance du FichierALire
If System.IO.File.Exists(FichierALire)
Try
Dim sr As StreamReader = New StreamReader(FichierALire, System.Text.Encoding.Default)
Dim ligne As String
'--- Traitement du fichier ligne par ligne
While Not sr.EndOfStream()
ligne = sr.ReadLine()
MsgBox(ligne)
'TODO : CODE TRAITEMENT FICHIER

End While
'--- Referme StreamReader
sr.Close()

Catch ex As Exception
'Traitement de l'exception sinon :
Throw ex
End Try
Else
MsgBox("fichier " & FichierALire & " inexistant", MsgBoxStyle.Critical, " -- ! -- ")
End If
cs_ankou22 Messages postés 81 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 7 juin 2012
15 mai 2007 à 11:07
Merci Amazing pour ta remarque sur les caractères accentuées qui ne sont pas pris en compte avec :

Dim Maligne As StreamReader = New StreamReader(Monflux)

ou

Dim Maligne As StreamReader = New StreamReader(Monflux, System.Text.Encoding.ASCII)

Mais qui le sont avec :

Dim Maligne As StreamReader = New StreamReader(Monflux, System.Text.Encoding.Default)
cs_LaPatoshe Messages postés 53 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 19 décembre 2009
5 mai 2006 à 01:17
C'est cour, simple, explicite. Merci cela m'a été bien utile.
bam_soft Messages postés 1 Date d'inscription vendredi 8 juillet 2005 Statut Membre Dernière intervention 15 février 2006
15 févr. 2006 à 10:49
je cherche un code qui fait "lecture fichier texte"
BEN AMMAR Mohamed I4 2006
w_a_mag Messages postés 2 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 21 avril 2005
21 avril 2005 à 22:13
de l'aide :
aminecom_4@hotmail.com
w_a_mag Messages postés 2 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 21 avril 2005
21 avril 2005 à 22:08
je suis un débutant avec le vb
je creer une application et j ai besoin d' aide C-V-P
je ve le code d'une bouton ajout pour ajouter un element dans un fichier
merci
cs_jadot Messages postés 21 Date d'inscription mardi 31 août 2004 Statut Membre Dernière intervention 10 septembre 2007
29 mars 2005 à 10:16
Merci pour ta reponse sebmafate.
Effectivement je n'ai pas essayé sur de gros fichiers pour comparer les performances, il faudra que j'essaye.
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
29 mars 2005 à 09:32
.Net fournit des classes spécifiques et optimisé pour l'accès aux fichiers.
De plus, elles sont plus fidèles au modèle objet.

Maintenant, ton code est correct en VB6.
cs_jadot Messages postés 21 Date d'inscription mardi 31 août 2004 Statut Membre Dernière intervention 10 septembre 2007
29 mars 2005 à 09:21
Meme si j'ai posé une bete question ca me ferais plaisir si quelqu'un pouvait me repondre ;-)
Un site avec 404257 membres parti en vacances en meme temps peut-etre.
cs_jadot Messages postés 21 Date d'inscription mardi 31 août 2004 Statut Membre Dernière intervention 10 septembre 2007
22 mars 2005 à 08:45
La methode avec EOF existe toujours non ?
Je l'utilise toujours :-)
Le code suivant fonctionne en VB.net chez moi.
Quelqu'un peut-il me dire ce qu'il a de mauvais ?
Merci.

Sub lectureFichier(ByVal fichier As String)
Dim ligne As String ' Variable contenant le texte de la ligne

FileOpen(1, fichier, OpenMode.Input)
While Not EOF(1)
ligne = LineInput(1)
' TRAITEMENT A EFFECTUER SUR LA LIGNE ICI
End While
FileClose(1)

End Sub
cs_nicolas22 Messages postés 5 Date d'inscription mercredi 9 mars 2005 Statut Membre Dernière intervention 16 mars 2005
16 mars 2005 à 09:18
merci amazing !!! le is nothing, je l'ai cherché longtemps ! :)

Trésorsdevie :

Tu t'emballes un peu, je n'ai jamais dis que ton code te faisais gagner une ligne !?!?!? J'ai simplement demandé si de déclarer une variable et l'initialisé dans une boucle n'était pas un peu lourd pour le programme. Je me renseigne ! Méacoulpa.

Pour ton pique concernant les programmeurs et "bidouilleurs", je te signale que nous ne sommes pas tous des programmeurs avertis dans tous les langages. Si comme je le dis dans les explications de mon code, je reste encore une débutant en vb, je pense avoir des qualités dans bien d'autres langages succeptible d'être apprécié.

Il s'agissait de mon premier source sur vbfrance, je n'en reposterais plus, car si des fois nous tombons sur des commentaires constructif comme celui de Amazing, qui nous fait avancé, il y a des commentaires dont on se passerait bien.

P.S : Je viens de jeter un coup d'oeil à tes sources. Ouhaaa ! Microsoft ne devrait pas tarder à te contacter !
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
15 mars 2005 à 19:25
d'ailleur dans mon exemple C#... la syntaxe est fouireuse (honte à moi :()

while ((line = sr.ReadLine()) != null) {
...
}

Séb
tresorsdevie Messages postés 135 Date d'inscription lundi 17 juin 2002 Statut Membre Dernière intervention 20 juillet 2013
15 mars 2005 à 19:03
commentaire ++ amazing
tu as tout juste
;)
cs_Amazing Messages postés 35 Date d'inscription lundi 23 juin 2003 Statut Membre Dernière intervention 17 avril 2010 2
15 mars 2005 à 18:40
Désolé ,nicolas22,mais :
Personellement,je ne pense pas que tout ton code soit un exemple à suivre car:
tu assigne à la variable "ligne" une valeur pour ensuite verifié la condition " ligne <> "" ",
l'assignation de la variable -> c'est une ligne de trop
je rejoint le code de sebmafate:

Sub lectureFichier(ByVal fichier As String)

Try
Dim monStreamReader As New StreamReader(fichier) 'Stream pour la lecture
Dim ligne As String ' Variable contenant le texte de la ligne

do
ligne = monStreamReader.ReadLine
MsgBox(ligne)
' TRAITEMENT A EFFECTUER SUR LA LIGNE ICI
Loop Until ligne Is Nothing monStreamReader.Close()

Catch ex As Exception
MsgBox("Une erreur est survenue au cours de l'accès en lecture du fichier de configuration du logiciel." & vbCrLf & vbCrLf & "Veuillez vérifier l'emplacement : " & fichier, MsgBoxStyle.Critical, "Errueur lors e l'ouverture du fichier conf...")
End Try

End Sub
qui me semble plus un exemple à suivre

sinon,tout à fait d'accord sur l'utilisation du "try catch" ,c'a fait plus VB.NET :-)

pour le code de tresorsdevie:

Dim Maligne As StreamReader = New StreamReader(Monflux, System.Text.Encoding.ASCII)
il a utilisé un decodage en ASCII,(qui ne prend pas les caractère accentué d'un fichier texte ,sauf dans certain cas)

System.Text.Encoding.Default,serai peut-etre plus approprié

informatiquement votre

Amazing
tresorsdevie Messages postés 135 Date d'inscription lundi 17 juin 2002 Statut Membre Dernière intervention 20 juillet 2013
15 mars 2005 à 18:09
si tu croit que le but est de gagner une ligne de code , c'est que tu n'a rien compris

ce que je reproche a ton code c'et la maniere dont tu boucle.
je cite : "ligne = "départ" 'ici vou pouvez mettre ce que vous voulez du moment que la variable est non vide
While ligne <> ""
etc...
end while.

je dirait que ce n'est pas la bonne methode a employer , c'est plus de la bidouille pour moi ...tant qu'on arrive a ce qu'on veut.. me diras tu...
c'est ce qui fait la difference entre un programmeur et un bidouilleur..
tresorsdevie Messages postés 135 Date d'inscription lundi 17 juin 2002 Statut Membre Dernière intervention 20 juillet 2013
15 mars 2005 à 15:35
nicolas22 : "Ton post m'a permis de mieux regarder ton code, et donc d'en apprendre encore sur les fichiers en vb ! Merci ! :) Vais m'en reservir c'est sûre."

c'est l'essentiel ;)
bonne continuation!
cs_nicolas22 Messages postés 5 Date d'inscription mercredi 9 mars 2005 Statut Membre Dernière intervention 16 mars 2005
15 mars 2005 à 15:32
oops j'oubliais ! Tu déclare une variable locale rep dans ta boucle. Tu gagnes effectivement une ligne de code, par contre ce ne serais pas un peu lourd pour le prog ?
cs_nicolas22 Messages postés 5 Date d'inscription mercredi 9 mars 2005 Statut Membre Dernière intervention 16 mars 2005
15 mars 2005 à 15:31
tresorsdevie :
Effectivement c'est une autre façon de vérifier la condition de fin du fichier. on en apprend tous les jours.

J'avais effectivement vu ton source, et c'est un code très bien organisé et très performant. Peut être trop par rapport à ce que je viens de poster.

Ce code a pour but de permettre à des débutants de connaitre un code de lecture simple, je ne propose pas de macher le travail du programmeur apprentis (dont je fais partie), mais simplement de lui donner une clé. :)

C'est pourquoi cette fonction ne prend que 6 ou 7 lignes et pas plus. :)

Ton post m'a permis de mieux regarder ton code, et donc d'en apprendre encore sur les fichiers en vb ! Merci ! :) Vais m'en reservir c'est sûre.
tresorsdevie Messages postés 135 Date d'inscription lundi 17 juin 2002 Statut Membre Dernière intervention 20 juillet 2013
15 mars 2005 à 15:19
deja present ici :
http://www.vbfrance.com/code.aspx?ID=8235

effectivement il existe une autre solution pour la fin du fichier:

'lecture du flux
Dim Monflux As Stream
Monflux = File.OpenRead(TcheminFichier.Text)

'lecture ligne à ligne
Dim Maligne As StreamReader = New StreamReader(Monflux, System.Text.Encoding.ASCII)
Maligne.BaseStream.Seek(0, SeekOrigin.Begin)
'.peek defini le caractere suivant, si =-1 c'est qu'il n'y a plus de caractere
'donc la fin du fichier est atteinte
While Maligne.Peek() > -1
Dim rep As String = Maligne.Peek
TResFichier.Text = TResFichier.Text + Maligne.ReadLine() + vbNewLine
End While
Maligne.Close()
cs_nicolas22 Messages postés 5 Date d'inscription mercredi 9 mars 2005 Statut Membre Dernière intervention 16 mars 2005
15 mars 2005 à 14:06
Jrb : Le code existe, mais je le trouve souvent bien long, bien mal documenté, et surtout, rarement inclut dans un try catch.
Je trouve que le try catch est obligatoire lorsqu'un logiciel a besoin d'une ressource extérieur.
Sinon, le code existe j'en ai trouvé plein (mais peu marchait réellement).
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
15 mars 2005 à 11:45
mouaip...
pourtant rien ne vaut :
[C#]
While ((line = sr.ReadLine()) != null)
...
Wend

[VB.NET]
Do
line = sr.ReaderLine()
...
Loop Until line Is Nothing

Séb
jrbleboss Messages postés 480 Date d'inscription jeudi 6 mai 2004 Statut Membre Dernière intervention 3 septembre 2007 1
14 mars 2005 à 21:38
Pas mal pour les débutants. C'est bien !!!
Mais je suis étonné que cela n'existe pas deja, enfin je te crois.

Bonne prog!!!!!!!

JRB
Rejoignez-nous