Lecture de fichier avec peek - pbl de boucle

collargol123 Messages postés 86 Date d'inscription jeudi 24 octobre 2013 Statut Membre Dernière intervention 2 avril 2014 - 18 mars 2014 à 14:34
collargol123 Messages postés 86 Date d'inscription jeudi 24 octobre 2013 Statut Membre Dernière intervention 2 avril 2014 - 28 mars 2014 à 00:30
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 ?
A voir également:

8 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
18 mars 2014 à 14:41
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.
0
collargol123 Messages postés 86 Date d'inscription jeudi 24 octobre 2013 Statut Membre Dernière intervention 2 avril 2014
18 mars 2014 à 17:23
J'ai supprimé la premiere boucle

Do Until sr.Peek = -1
...
Loop
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
18 mars 2014 à 19:06
Ah ... Tu as donc supprimé la meilleure.... (surtout si par malheur ton fichier comportait moins de 15 lignes !).
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
18 mars 2014 à 17:47
Bonjour
Explique ce que tu veux faire
0
collargol123 Messages postés 86 Date d'inscription jeudi 24 octobre 2013 Statut Membre Dernière intervention 2 avril 2014
18 mars 2014 à 19:08
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
0

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

Posez votre question
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
18 mars 2014 à 19:30
certaines données de chaque ligne

c'est quel genre de fichier ?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 18/03/2014 à 19:43
(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.
0
collargol123 Messages postés 86 Date d'inscription jeudi 24 octobre 2013 Statut Membre Dernière intervention 2 avril 2014
20 mars 2014 à 01:23
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.
0
collargol123 Messages postés 86 Date d'inscription jeudi 24 octobre 2013 Statut Membre Dernière intervention 2 avril 2014
20 mars 2014 à 01:25
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 20/03/2014 à 07:45
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
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
Modifié par cs_ShayW le 20/03/2014 à 09:23
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 ?
0
collargol123 Messages postés 86 Date d'inscription jeudi 24 octobre 2013 Statut Membre Dernière intervention 2 avril 2014
28 mars 2014 à 00:30
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.
0
Rejoignez-nous