Lire la ligne d'un fichier texte en dessous de celle sur laquelle on pointe
drouault
Messages postés73Date d'inscriptionsamedi 9 juillet 2005StatutMembreDernière intervention14 août 2007
-
10 févr. 2006 à 16:39
crenaud76
Messages postés4172Date d'inscriptionmercredi 30 juillet 2003StatutMembreDerniè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
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
A voir également:
Lire la ligne d'un fichier texte en dessous de celle sur laquelle on pointe
econs
Messages postés4030Date d'inscriptionmardi 13 mai 2003StatutMembreDernière intervention23 décembre 200825 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.
econs
Messages postés4030Date d'inscriptionmardi 13 mai 2003StatutMembreDernière intervention23 décembre 200825 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
drouault
Messages postés73Date d'inscriptionsamedi 9 juillet 2005StatutMembreDernière intervention14 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.
crenaud76
Messages postés4172Date d'inscriptionmercredi 30 juillet 2003StatutMembreDernière intervention 9 juin 200628 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
satrincha
Messages postés8Date d'inscriptionjeudi 9 janvier 2003StatutMembreDernière intervention19 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.
crenaud76
Messages postés4172Date d'inscriptionmercredi 30 juillet 2003StatutMembreDernière intervention 9 juin 200628 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"