Lecture de fichier avec peek - pbl de boucle

Signaler
Messages postés
86
Date d'inscription
jeudi 24 octobre 2013
Statut
Membre
Dernière intervention
2 avril 2014
-
Messages postés
86
Date d'inscription
jeudi 24 octobre 2013
Statut
Membre
Dernière intervention
2 avril 2014
-
Bonjour,

Je lis un fichier avec le code suivant

Dim sr As New StreamReader(Chemin & "\" & selection)

Do Until sr.Peek = -1
i = 1
Do Until i = 15
ligne = sr.ReadLine()
Ar(i) = ligne
i = i + 1
Loop
Loop

Les lignes de 1 à 15 sont stockées dans un tableau.
Mon probleme est que la boucle' do until i = 15 n'est pas reconnue ce qui ne me permet pas de récupérer les lignes que je souhaite.

Sauriez-vous pourquoi ?

8 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
Bonjour,
Je ne comprends pas la nécessite de la seconde boucle, si tu ne veux lire que les 15 premières lignes. Lis-les donc une par une (en incrémentant i) et arrête lorsque i = 15.
Messages postés
86
Date d'inscription
jeudi 24 octobre 2013
Statut
Membre
Dernière intervention
2 avril 2014

J'ai supprimé la premiere boucle

Do Until sr.Peek = -1
...
Loop
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
Ah ... Tu as donc supprimé la meilleure.... (surtout si par malheur ton fichier comportait moins de 15 lignes !).
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
49
Bonjour
Explique ce que tu veux faire
Messages postés
86
Date d'inscription
jeudi 24 octobre 2013
Statut
Membre
Dernière intervention
2 avril 2014

en fait je veux récupérer certaines données de chaque ligne et les mettres dans un tableau pour les exploiter par la suite
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
49
certaines données de chaque ligne

c'est quel genre de fichier ?
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
(Un salut à ShayW)
et pour compléter ses questions :
A quoi reconnais-tu ce que tu veux "récupérer" sur chaque ligne ?
Tu es jusqu'à présent pour le moins très imprécis.
Et ce que tu dis maintenant s'écarte déjà de ce que tu disais (dans ton premier message) de la difficulté rencontrée (à savoir : lire les 15 premières "lignes") !
Recommence tout à zéro en te montrant très précis.
Je commence personnellement à douter que ton fichier comporte au moins 15 lignes réelles (séparées par des retours charriot) . Je me demande même si tu n'as pas à traiter finalement un fichier structuré.

EDIT : d'où récupères-tu ce fameux fichier ? Est-il un fichier écrit par toi ?
-- et si oui : comment (le code par lequel il a été écrit) ?
-- et si non : montre-nous (par copier/coller) au moins ses fameuses 15 premières lignes réelles.
Messages postés
86
Date d'inscription
jeudi 24 octobre 2013
Statut
Membre
Dernière intervention
2 avril 2014

Bonjour,

C'est un fichier .txt et donc chaque ligne contient du texte (qq mots).
Je souhaite donc récuperer les mots de certaines lignes (ex la ligne 2 , puis 4 ) entre les lignes 1 et 15.

D'ou le code :

Dim sr As New StreamReader(Chemin & "\" & selection)

Do Until sr.Peek = -1
i = 1
Do Until i = 15
ligne = sr.ReadLine()
Ar(i) = ligne
i = i + 1
Loop
Loop

la 1re boucle
Do Until sr.Peek = -1
ne fonctionne pas. Lorsque i arrive 15, i est réinialisé à 0 et c'est reparti jusq'à la derniere ligne du fichier. Et donc dans mon tablau ce n'est pas les bonnes données qui sont stockées.

J'ai donc supprimé cette première boucle ce qui me permet de récupérer les bonnes données.

Sur le principe, je ne comprend pas pourquoi cette 1ere boucle ne fonctionne pas.
Messages postés
86
Date d'inscription
jeudi 24 octobre 2013
Statut
Membre
Dernière intervention
2 avril 2014

Le fichier texte peut se présenter de cette maniere, à titre d'exmple :

Public Sub CBduJour()

Dim bou As Integer
Dim dat As String
Dim mont As String
Dim pai As String

Dim z As ListView
Set z = Form1.ListView1
For bou = 1 To z.ListItems.Count

dat = z.ListItems(bou).SubItems(1)
mont = Val(z.ListItems(bou).SubItems(4))
pai = z.ListItems(bou).SubItems(3)

If dat = Form1.Text13.Text And pai = "CB" Then
Form1.Text14.Text = Val(Form1.Text14.Text) + mont
End If
Next

End Sub
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
a 1re boucle

"Do Until sr.Peek = -1

ne fonctionne pas. Lorsque i arrive 15, i est réinialisé à 0 et c'est reparti jusq'à la derniere ligne du fichier.
"
Et ?
Tu ne veux que les 15 première lignes ?
supprime donc la seconde boucle. Ne garde que la première (en y incrémentant i) et mets-y une seconde condition (or i >= 15) !

Et si, finalement, ce sont toutes les lignes, que tu veux, mais 15 par 15, ==>> dis-le avec clarté !

EDIT : et on commencera peut-être à deviner ce que tu cherches à exprimer si tu nous montres où et comment tu as déclaré (et donc dimensionné) ton tableau Ar
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
49
D'abord il faut employer les termes exactes
chaque ligne de ton fichier text est un string qui se termine par deux caractères cr lf ce ne sont pas quelques mots (bien que tu interprètes ainsi )

Je souhaite donc récuperer les mots de certaines lignes (ex la ligne 2 , puis 4 ) entre les lignes 1 et 15.

Quel interet de dire que la ligne 2 se trouve entre 1 et 15 ?

tout simplement

private ar as new list(of string)

private sub ReadFile(path as string)
try
ar = System.IO.File.ReadAllLines(path).ToList
Catch ex As Exception
'en cas d'exception affiche l'erreur
MessageBox.Show(ex.Message)
End Try
end sub

après fais ce que tu veux avec ar
'ar(0) représente la premiere ligne de ton fichier
'ar(ar.count -1) est la derniere ligne de ton fichier
dim ligne as string
ligne = ar(ar.count -1)

Bonjour Ucfoutu
Ou as tu mis ta boule de cristalle ?
Messages postés
86
Date d'inscription
jeudi 24 octobre 2013
Statut
Membre
Dernière intervention
2 avril 2014

Et si mon fichier txt contient par exemple plus de 100 lignes, et que l'on doit mettre toutes les lignes dans un tableau, est ce que cela ne va pas prendre trop de temps ?

Dim Chaine As String
Dim Ar(15) As String
Dim ligne As String
Dim i As Integer
Dim selection As String
selection = HPRIMfile.SelectedItem

Dim sr As New StreamReader(Chemin & "\" & selection & ".txt")

'While sr.Peek <> -1
i = 1
Do Until i = 15
ligne = sr.ReadLine
Ar(i) = ligne
i = i + 1
Loop
'End While
sr.Close()

bou = UCase(Ar(2))
bii = StrConv(Ar(3), vbProperCase)
baa = Ar(7)
Dada = Ar(10)



J'au supprimer la boucle, j'ai pu ainsi recuperer les données.