mruras
Messages postés2Date d'inscriptionjeudi 15 février 2007StatutMembreDernière intervention15 novembre 2007
-
15 nov. 2007 à 11:56
Kristof_Koder
Messages postés918Date d'inscriptionvendredi 3 août 2007StatutMembreDernière intervention27 octobre 2008
-
15 nov. 2007 à 18:13
Bonjour,
J'ai un probleme avec la lecture et ecriture dans un fichier txt.La procedure utilise 2 fichier (1 et 2)pour lire toutes leurs lignes , les confronter et s'elles sont les memes les ecrires dans un troisieme fichier
Le cycle interne(pour le fichier 2) est OK, mais pour le fichier 1 (cycle Do loop externe) il y a quelques problemes, et la Sub lit seulement la premiere ligne.Merci d'avance pour toutes aides. J'utilise le code suivant:
'reads from text file
Open Text1.Text For Input As #1
Open Text2.Text For Input As #2
'writes to text file
Open Text3.Text For Output As #3
Do While Not EOF(1)
comG = Mid(totsun1, 1, 10)
Do While Not EOF(2)
'lire donnes fichier 2
Line Input #2, totsun2
ComFo = Mid(totsun2, 1, 10)
If comG = ComFo Then ' Confrontation entre les 2 lignes
Print #3, totsun1, totsun2
End If
Loop
Loop ' pourquoi cet cycle est executé 1 fois seulement ?
mruras
Messages postés2Date d'inscriptionjeudi 15 février 2007StatutMembreDernière intervention15 novembre 2007 15 nov. 2007 à 14:44
ok, la lecture lineInput#1 je l'avais oubliè dans l'exemple mais non dans le code du programme. Mon objectif est le suivant:
Confonter chaque ligne du fichier 2 avec chaque ligne du fichier 1, et maintenent confronte chaque ligne du fichier 2 mais seulement avec la premiere du fichier 1.
Peut etre qu'on doit fermer le fichier 2 a l'interieur du cycle ? Merci
majilion
Messages postés26Date d'inscriptionmercredi 21 février 2007StatutMembreDernière intervention27 mars 2011 15 nov. 2007 à 14:54
bon si je comprends ce ke vous voulez tu dois 1erment verifier ke le fichier 1 est contenu de plus k'1 seul enregistrement parce ke le code est correcte.
et pour confronter chaque ligne du fichier 2 mais seulement avec la premiere du fichier 1 tu dois lever la 1ere boucle le code devient
'reads from text file
Open Text1.Text For Input As #1
Open Text2.Text For Input As #2
'writes to text file
Open Text3.Text For Output As #3
Line Input #1, totsun1
comG = Mid(totsun1, 1, 10)
Do While Not EOF(2)
'lire donnes fichier 2
Line Input #2, totsun2
ComFo = Mid(totsun2, 1, 10)
If comG = ComFo Then ' Confrontation entre les 2 lignes
Print #3, totsun1, totsun2
Kristof_Koder
Messages postés918Date d'inscriptionvendredi 3 août 2007StatutMembreDernière intervention27 octobre 200810 15 nov. 2007 à 18:13
Il faudrait effectivement refermer et rouvrir le fichier 2 dans la boucle sur le fichier 1.
Mais le problème, c'est que tu vas accéder et relire en entier ton fichier 2 à chaque ligne du fichier 1. Les accès disque étant ce qu'"il y a de plus lent, il faudrait passer tout cela dans des tableaux
Dim L1() As String ' Tableau destiné à recevoir les lignes du fichier 1
Dim L2() As String ' Tableau destiné à recevoir les lignes du fichier 2
Dim Buffer As String ' String destinée à recevoir le contenu du fichier 3
Dim i As Long, j As Long ' Variable pour les deux boucles for
Dim T1 As Long, T2 As Long ' Variable pour les dimensions des tableau L1 et L2
Open Text1.Text For Input As #1
' Lecture de tout le fichier 1 et eclatement ligne par ligne dans le tableau
L1 = Split(Input(#1, LOF(1)), vbCrLf)
Close #1
Open Text2.Text For Input As #2
' Lecture de tout le fichier 2 et eclatement ligne par ligne dans le tableau
L2 = Split(Input(#2, LOF(2)), vbCrLf)
Close #2
T1 = UBound(L1)
T2 = UBound(L2)
For i = 0 To T1
For j = 0 To T2
If Mid$(L1(i), 1, 10) Mid$(L2(j), 1, 10) Then Buffer Buffer & L1(i) & vbCrLf
Next
Next
Open Text3.Text For Output As #3
Print #3, Buffer
Close #3
J'ai pas testé mais cela devrait fonctionner et sans doute bcp plus rapidement, car seulement 3 accès disque dans tout le code.