Ecriture dans un fichier .txt

mruras Messages postés 2 Date d'inscription jeudi 15 février 2007 Statut Membre Dernière intervention 15 novembre 2007 - 15 nov. 2007 à 11:56
Kristof_Koder Messages postés 918 Date d'inscription vendredi 3 août 2007 Statut Membre Dernière intervention 27 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 ?


Close #1
Close #2
Close #3

7 réponses

cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
15 nov. 2007 à 12:08
Salut,

Regarde ce snippet de Jmfmarques(salut), il est possible que cela puisse t'aider...

A+
Exploreur

 Linux a un noyau, Windows un pépin

 
0
majilion Messages postés 26 Date d'inscription mercredi 21 février 2007 Statut Membre Dernière intervention 27 mars 2011
15 nov. 2007 à 13:09
bonjour je crois ke vous avez oubliez de lire du 1er fichier 

'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)

     Line Input #2, totsun2
    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 ?

Close #1
Close #2
Close #3

 

La vie est pour tous.
0
majilion Messages postés 26 Date d'inscription mercredi 21 février 2007 Statut Membre Dernière intervention 27 mars 2011
15 nov. 2007 à 13:11
dsl g oublié de changer le N° de canal:

'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)

     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
    
  End If
 
Loop
       
Loop  ' pourquoi cet cycle est executé 1 fois seulement ?

Close #1
Close #2
Close #3

La vie est pour tous.
0
majilion Messages postés 26 Date d'inscription mercredi 21 février 2007 Statut Membre Dernière intervention 27 mars 2011
15 nov. 2007 à 13:13
alors la 2éme boucle ne s'execute pas une seule fois mé chaque fois k'elle s'execute elle ne lu ke le méme enregistrement et bonne chance.

La vie est pour tous.
0

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

Posez votre question
mruras Messages postés 2 Date d'inscription jeudi 15 février 2007 Statut Membre Dernière intervention 15 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
0
majilion Messages postés 26 Date d'inscription mercredi 21 février 2007 Statut Membre Dernière intervention 27 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
    
  End If
 
Loop
       

Close #1
Close #2
Close #3

La vie est pour tous.
0
Kristof_Koder Messages postés 918 Date d'inscription vendredi 3 août 2007 Statut Membre Dernière intervention 27 octobre 2008 10
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.
0
Rejoignez-nous