Lecture de fichier texte.txt [Résolu]

Signaler
Messages postés
23
Date d'inscription
jeudi 27 février 2014
Statut
Membre
Dernière intervention
19 mai 2018
-
Messages postés
23
Date d'inscription
jeudi 27 février 2014
Statut
Membre
Dernière intervention
19 mai 2018
-
Bonjour,

j'utilise ce bout de code pour lire un fichier texte.

Je remplis avec ma boucle une collection de string.

Le problème que je rencontre est avec les diacritiques, il me récupère des petits losanges avec un point d'interrogation :'(


Try
   Dim monStreamReader As New IO.StreamReader(FichierDeMot)
   Dim MotDeListeDeMot As String

   Do
     MotDeListeDeMot = monStreamReader.ReadLine
     ListeDeMot.Add(MotDeListeDeMot)
   Loop Until MotDeListeDeMot = "-" 'Boucle jusqu'au trait

   NombreDeMot = ListedeMot.Count - 1

   monStreamReader.Close()

   Catch ex As Exception
     MsgBox("Une erreur est survenue au cours de la lecture du fichier de mots.",vbCritical,"Erreur de lecture")
End Try


Merci pour votre aide passée / présente et future :)

8 réponses

Messages postés
15934
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 mai 2021
545
Bonjour

les diacritiques dépendent de l'encodage du fichier: UTF7, UTF8, etc...

Dim monStreamReader As New IO.StreamReader(FichierDeMot, System.Text.Encoding.'ici mettre la constante du format qui va bien, commence par essayer Ascii

Messages postés
23
Date d'inscription
jeudi 27 février 2014
Statut
Membre
Dernière intervention
19 mai 2018

Merci pour ta réponse rapide et efficace, j'ai testé avec

ASCII -> m'a récupéré des ? au lieu des losanges
UTF8 -> toujours mes losanges
default -> Impecc :)

Alors à quoi correspond default, je ne sais pas exactement mais faudra que je me penche dessus quand j'aurais un peu plus de connaissance.

Merci pour ton aide.
Messages postés
15934
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 mai 2021
545
Ok, alors maintenant littéralement ça
NombreDeMot = ListedeMot.Count - 1
c’est faux, Count retourne le nombre d’enregistrements si tu as bien un mot par ligne alors Count - 1 sera le nombre de mots - 1. Si tu as besoin du nombre de mots - 1, c’est ok, mais la variable est mal nommée.

De plus, il y a peut être plus simple à coder. Le tiret sépare t il le fichier en 2 ou est ce la dernière ligne?
Messages postés
23
Date d'inscription
jeudi 27 février 2014
Statut
Membre
Dernière intervention
19 mai 2018

Bonjour,

le tiret est la dernière ligne de mon fichier, c'est la méthode que j'ai trouvé pour arrêter la lecture du fichier.
Messages postés
15934
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 mai 2021
545
La classe File permet des manipulations de fichiers, et entre autre, lecture / écriture sans passer par un stream.

File.ReadAllLines retourne un tableau ou chaque ligne du fichier est un item du tableau.
Vu que le tiret est ta dernière ligne, il suffit de dire que tu veux tout le tableau sauf la dernière ligne ou sauf "-"
Ensuite tu castes en liste.

Un truc comme ça (tapé de tête, y'a p'tet des petites boulettes)
Dim lignes as String()= File.ReadAllLines(FichierDeMot, Encoding.Default)
ListeDeMot = lignes.Take(lignes.Length-1).ToList()'je prends les N-1 premières lignes et j'en fait une liste


Ça t'évite d'ouvrir un stream, de faire ta boucle et de le fermer.


Sinon, pour atteindre la fin du fichier, il suffisait d'appliquer l'exemple qui est sur l'aide en ligne
https://msdn.microsoft.com/fr-fr/library/system.io.streamreader(v=vs.110).aspx
Boucle tant que la ligne vaut quelque chose.
Messages postés
23
Date d'inscription
jeudi 27 février 2014
Statut
Membre
Dernière intervention
19 mai 2018

Bonjour/Bonsoir

me revoilà après quelques changements à mon code.
Voici la nouvelle version de lecture et de mise en collection de mon fichier txt.

Le problème et que même après une réinitialisation de la variable FichierDeMots, quand je reviens sur cette partie de mon code avec une nouvelle valeur de variable, il m'ouvre quand même l'ancienne version du fichier. Existe-t-il une option pour "décharger" ce fichier ?

		' Déclaration des variables / Lecture du fichier.txt
		Dim Lignes as String()= File.ReadAllLines("Listes\" & FichierDeMots & ".txt", System.Text.Encoding.UTF8)
		Dim i As Integer
		Dim NombreDeMots As Integer = Lignes.Length
		Dim IndexMot as Integer
		Dim random As New Random()
		' Mise en Collection
		For i = 0 To Lignes.Length - 1
			ListeDeMots.Add(Lignes(i))
		Next
Messages postés
2427
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
6 mai 2021
137
Bonjour !
A mon avis il ne t'ouvre pas l'ancienne version du fichier !
Il ajoute à l'ancienne version du version la nouvelle version : les lignes du nouveau fichier sont mises à la fin des lignes de l'ancien fichier pour reprendre ta terminologie .
il faut vider la collection avant d'ajouter les nouvelles lignes du nouveau fichier

' Déclaration des variables / Lecture du fichier.txt
  Dim Lignes as String()= File.ReadAllLines("Listes\" & FichierDeMots & ".txt", System.Text.Encoding.UTF8)
  Dim NombreDeMots As Integer = Lignes.Length
  Dim IndexMot as Integer
  Dim random As New Random()
  ListeDeMots.Clear() ' ligne à rajouter pour effacer la collection
  ' Mise en Collection
  For i = 0 To Lignes.Length - 1
   ListeDeMots.Add(Lignes(i))
  Next


ou alors tu reprends le code que Whismeril t'as donné ce qui évite la boucle For ainsi que le vidage de la collection

Messages postés
23
Date d'inscription
jeudi 27 février 2014
Statut
Membre
Dernière intervention
19 mai 2018

Bonjour et merci.

Cela fonctionne très bien avec ton code en plus.