Lecture de fichier texte.txt

Résolu
Efferp Messages postés 24 Date d'inscription jeudi 27 février 2014 Statut Membre Dernière intervention 4 octobre 2021 - Modifié le 3 mai 2018 à 21:51
Efferp Messages postés 24 Date d'inscription jeudi 27 février 2014 Statut Membre Dernière intervention 4 octobre 2021 - 10 mai 2018 à 17:53
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

Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
3 mai 2018 à 22:51
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

0
Efferp Messages postés 24 Date d'inscription jeudi 27 février 2014 Statut Membre Dernière intervention 4 octobre 2021
3 mai 2018 à 23:58
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.
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
4 mai 2018 à 06:56
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?
0
Efferp Messages postés 24 Date d'inscription jeudi 27 février 2014 Statut Membre Dernière intervention 4 octobre 2021
4 mai 2018 à 22:45
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
5 mai 2018 à 00:03
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.
0
Efferp Messages postés 24 Date d'inscription jeudi 27 février 2014 Statut Membre Dernière intervention 4 octobre 2021
8 mai 2018 à 22:28
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
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
Modifié le 9 mai 2018 à 01:02
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

0
Efferp Messages postés 24 Date d'inscription jeudi 27 février 2014 Statut Membre Dernière intervention 4 octobre 2021
10 mai 2018 à 17:53
Bonjour et merci.

Cela fonctionne très bien avec ton code en plus.
0
Rejoignez-nous