Lire la ligne d'un fichier texte en dessous de celle sur laquelle on pointe

drouault Messages postés 73 Date d'inscription samedi 9 juillet 2005 Statut Membre Dernière intervention 14 août 2007 - 10 févr. 2006 à 16:39
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 - 16 févr. 2006 à 18:11
Bonjour,

Voila mon souci

Je balaye mon fichier texte et je souhaite traiter la valeur de la ligne sur laquelle je suis à partir de la valeur du la ligne du dessous. C'est à dire que la valeur de la ligne du desous que je reécupére jouera sur le traitement que j'appliquerai à la ligne sur laquelle je suis.

Comment récupérer la valeur de la ligne inférieur en restant sur la ligne sur laquelle je suis pour lui appliquer le traitement.

Ci joint mon bout de code merci d'avance

While Not EOF(1)
i = i + 1
j = 0
ligne = ""
'Recuperationde la valeur de la ligne
Line Input #1, ligne
pipe = InStr(1, ligne, "|", vbTextCompare)

'Si pas de pipe j'écris directement dans le fichier de recuperation des données
If pipe = 0 Then
Print #2, ligne
Else
If pipe <> 0 Then

arret1 = pipe 'Recuperation du debut pour tronquer
arret2 = InStr(pipe + 1, ligne, "|", vbTextCompare)

''Je recupere la valeur incluse entre les deux pour pouvoir la tester
valeur_intermediaire = Trim(Mid(ligne, arret1 + 1, ((arret2 - arret1) - 1)))

'Je teste si ma valeur intermédiaire est égale à IDPOSTE

idposte = InStr(1, valeur_intermediaire, "IDPOSTE", vbTextCompare)

If idposte = 1 Then
'Je vais ensuite tester si la premiere lettre de la ligne en dessous est egale a R
'SI idposte = 0 j'écris la ligne à suivre
C'EST LA QUE JE VOUDRAIS LIRE LA LIGNE DU DESSOUS POUR DECIDER DE L'ACTION A
MENER SUR LA LIGNE SUR LAQUELLE JE SUIS
Else

'Print #2, ligne

End If

End If
End If

Wend

End Sub

14 réponses

econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 25
10 févr. 2006 à 16:47
Avec un fichire texte tout bête, tu vas galérer.

Parcours d'abord ton fichier texte, et enregistre chaque ligne dans une listbox. Tu auras ainsi une copie de ton fichier texte.

Ensuite, tu n'as qu'à jongler avec les lignes d'une listbox. C'est plus
facile. Tu peux calculer quelquechose en utilisant ce qu'il y a deux
lignes au dessus ou trois lignes en dessous. C'est beaucoup plus souple.



Et tu réécris ton fichier texte APRES tous tes traitements.

Manu
0
drouault Messages postés 73 Date d'inscription samedi 9 juillet 2005 Statut Membre Dernière intervention 14 août 2007
10 févr. 2006 à 16:58
Simple mais fallait y penser !! Merci bien c'est vrai que je vois tout de suite la soluce la maintenant !!!

A+

Pierre
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
10 févr. 2006 à 17:04
Plutot que de charger dans une listbox, je chargerais dans un tableau moi !

CR
0
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 25
10 févr. 2006 à 17:20
crenaud> C'est certes beaucoup mieux dans un tableau.

Quand j'ai des opérations complexes à faire avec des tableaux, je les
affiche toujours dans une listbox. Ainsi, d'un coup d'oeil, je vois si
je fais des bêtises ou pas. Ensuite, quand je sais que la gestion du
tableau est bonne, j'enlève la listbox.



C'est juste une solution "visuelle". Le tableau est assurément nettement mieux.

Manu
0

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

Posez votre question
satrincha Messages postés 8 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 19 septembre 2011
10 févr. 2006 à 17:32
Utilise 2 pointeurs en lecture sur le meme fichier texte.
Le premier lit la ligne courante, l'autre la ligne suivante.
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
10 févr. 2006 à 18:11
satrincha < "Deux pointeurs sur le meme fichier" ??????

CR
0
drouault Messages postés 73 Date d'inscription samedi 9 juillet 2005 Statut Membre Dernière intervention 14 août 2007
10 févr. 2006 à 18:58
Bonsoir à tous

Tout d'abord merci beaucoup pour votre aide le pb est résolu grâce à un tableau.
En effet, j'avais plus de 200000 lignes à traiter et la listbox bugger apparament à cause de ça, et le temps d'éxécution avec un tableau est de plus bien plus courte.

Je ne vois pas comment avoir deux pointeurs décaler dans le même fichier ? mais ça m'intéresse moi aussi de savoir satrincha.

Encore merci

Bonne soirée
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
10 févr. 2006 à 19:57
Salut,

c'est de la gestion de fichier avec une lecture d'avance.







Line Input #1, ligne1



While Not EOF(1)

Line Input #1, ligne2

' traitement ligne1 (avec ligne suivante = ligne2)

ligne1 = ligne2

Wend

Daniel
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
10 févr. 2006 à 22:15
drouault < Par contre, une remarque sur ton code. A un moment tu fais ca :
If pipe = 0 Then
Print #2, ligne
Else
If pipe <> 0 Then
...

Le second "If" sous le Else est totalement inutile.
En effet, si tu arrives dans la clause {Else}, c'est que pipe est différent de zéro justement (rapport à ton 1er "If").
Tu peux donc supprimer celui-ci

CR
0
drouault Messages postés 73 Date d'inscription samedi 9 juillet 2005 Statut Membre Dernière intervention 14 août 2007
11 févr. 2006 à 22:45
C'est exact Crenaud j'avais pas fais attention à ça ...

Merci

Pierre
0
satrincha Messages postés 8 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 19 septembre 2011
13 févr. 2006 à 17:23
Je me suis peut etre mal fait comprendre.

' Une série de chiffre (séparé par cr-lf) dans le fichier c:\test.txt
' 1,2,3,4,3,5,6


Dim F1 As Long
Dim F2 As Long
Dim Champs1 As String
Dim Champs2 As String


F1 = FreeFile
Open "c:\test.txt" For Input As F1
F2 = FreeFile
Open "c:\test.txt" For Input As F2


If Not EOF(F2) Then
Line Input #F2, Champs2
While Not EOF(F1)
Line Input #F1, Champs1
If Not EOF(F2) Then
Line Input #F2, Champs2
If Val(Champs1) > Val(Champs2) Then
MsgBox "La ligne 1 qui à la valeur " + Champs1 + " est supérieur a la ligne 2 qui a comme valeur " + Champs2
End If
End If
Wend
End If


Close #F1
Close #F2


J'utilise bien 2 pointeurs en lecture sur le même fichier. Mais la réponse de Gobillot est mieux adaptée.

Bonne soirée
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
13 févr. 2006 à 21:38
Satrincha <

F1 = FreeFile
Open "c:\test.txt" For Input As F1
F2 = FreeFile
Open "c:\test.txt" For Input As F2 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Ceci ne fonctionne pas !!
A partir du moment que "c:\test.txt" est ouvert par le 1er open, un second open NE PEUT PAS OUVRIR LE MÊME FICHIER "c:\test.txt"

CR
0
satrincha Messages postés 8 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 19 septembre 2011
16 févr. 2006 à 17:01
crenaud76 <

Bonjour,
Tu as peut etre raison, mais as-tu testé le petit bout de code que j'ai mis ?
Je n'ai aucun message d'erreur et les valeurs sont bien lus.

Là où je suis d'accord avec toi, c'est en mode ecriture où il est impossible d'ouvrir 2 fois le meme fichier puisque le premier open lock le fichier.
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
16 févr. 2006 à 18:11
mea culpa !!
0
Rejoignez-nous