Positionnement précis dans un fichier et comparaison du contenu de 2 fichiers tx

cs_ludo92 Messages postés 7 Date d'inscription lundi 26 septembre 2005 Statut Membre Dernière intervention 29 septembre 2005 - 26 sept. 2005 à 10:56
cs_ludo92 Messages postés 7 Date d'inscription lundi 26 septembre 2005 Statut Membre Dernière intervention 29 septembre 2005 - 27 sept. 2005 à 12:10
Bonjour,

je cherche à comparer le contenu de 2 fichiers et renvoyer le resultat dans un 3eme fichier

voila le code que j'ai fait pour y arriver mais cela ne fonctionne pas comme je voudrais

j'ai donc 2 fichiers
je parcours le fichier 1 en entier

pour chaque ligne de fichier 1 je regarde si il existe dans fichier 2

si oui alors j'écris la ligne de Fichier 2 dans fichier 3
si non alors j'écris la ligne de fichier 1 dans fichier 3


tel que le code est ecrit on pourrait penser que cela fonctionne
mais le pointeur sur le fichier 2 ne revient jamais en début de fichier

la methode Object.Line permet de savoir sur quelle ligne on se trouve dans le fichier

Il y a t il un methode pour se positionner sur une ligne précise dans un fichier ?
dans mon cas je souhaite revenir au début du fichier sans le fermer et le reouvrir

Si quelqu'un a une idée je suis preneur

merci d'avance


--------------------------------

Dim FSO, FileRef, FileNew, FileSourcesList, Ligne

Set FSO = CreateObject("Scripting.FileSystemObject")



Set FileRef = FSO.OpenTextFile(Path_ReferenceCSVFile) 'fichier de reference

Set FileSourcesList = FSO.OpenTextFile(Path_FileSourcesList) 'fichier sources file

Set FileNew = FSO.CreateTextFile("E:\NewRefFile.csv", True) 'fichier resultat



ligneref = FileRef.Readline

lignecourant = FileRef.Line


Do While Not FileSourcesList.AtEndofstream

Ligne = FileSourcesList.Readline

foundline = 0

Do While Not FileRef.AtEndofstream

ligneref = FileRef.Realine
If InStr(ligneref, Ligne) <> 0 Then ' ligneref contient ligne

FileNew.writeline (ligneref)

foundline = 1

Exit Do

End If




Loop

If foundline = 0 Then

' laligne n'a pas été trouvé dans le fichier de ref donc on l'ajoute

FileNew.writeline (Ligne)

End If

Loop



FileRef.Close

FileNew.Close

FileSourceList.Close


-------------------------------------------------------

11 réponses

aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 2
26 sept. 2005 à 11:22
salut

est-ce que tes fichiers sont gros ?
notamment le fichier de référence ?
car je pense que s'il ne sont pas trop gros, il serait préférable de stocker le contenu du fichier de référence dans un tableau de string, et comparer ensuite ton fichier original avec ce tableau. Ca te fera gagner du temps au niveau de l'exécution et ca résoudra ton problème !
0
cs_ludo92 Messages postés 7 Date d'inscription lundi 26 septembre 2005 Statut Membre Dernière intervention 29 septembre 2005
26 sept. 2005 à 11:34
merci pour ta réponse
mes fichiers font 4000 ou 5000 lignes ce qui est assez important je pense
je vais essayé ta solution

je suis étonné qu'il n'y est pas de methode pour se positionner au début d'un fichier à part faire close et open du fichier

si d'autres ont des idées sur le sujet
je suis toujours preneur

Ludo
0
cs_lacomm Messages postés 298 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 5 juillet 2013 1
26 sept. 2005 à 11:43
oui, je splitterais selon "l'unité de comparaison" : est-ce que tu compares des phrases, des lignes, des mots ..
phrase: split(texte1, ".")
lignes: split(texte1,vbCr)
mots:split(texte1," ")
mettons les lignes:

dim ligne() as string
ligne()=split(texte1, vbCr)
for i = 0 to ubound(ligne)
monresul=instr(texte2, ligne(i))
next


tu peux également splitter le deuxième fichier et faire deux boucles l'une dans l'autre.
dim ligne&() as string:dim ligne2() as string
ligne1()=split(texte1, vbCr):ligne2()=split(texte2, vbCr)

for i = 0 to ubound(ligne1)
for j = 0 to ubound(ligne2)
monresul=instr(ligne(j), ligne(i))
next j
next i

moi, j'ai fais ça avec ADO et des BD en access, c'est impec.
0
aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 2
26 sept. 2005 à 12:04
bah 4000 à 5000 je pense que ca reste raisonnable.

sinon je pense q'il doit exister des méthodes pour te positionner ou tu veux dans le fichier, mais je ne les connais pas. et en plus ton disque dur va prendre de sacrées claques (encore que la, vu le nombre de ligne, ca risque fort de swapper pas mal aussi, et donc c'est encore le DD qui va trinquer...)
0

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

Posez votre question
cs_ludo92 Messages postés 7 Date d'inscription lundi 26 septembre 2005 Statut Membre Dernière intervention 29 septembre 2005
26 sept. 2005 à 12:06
splitter consiste a mettre le fichier dans un tableau , c'est ça ?
c'est quoi vbCr

je suis en VBA et split n'est pas reconnu, une idée ?

Ludo
0
cs_ludo92 Messages postés 7 Date d'inscription lundi 26 septembre 2005 Statut Membre Dernière intervention 29 septembre 2005
26 sept. 2005 à 12:08
si split ne fonctionne pas en VBA quelle la methode la plus simple pour mettre le fichier1 dans un tableau de string ?

Ludo
0
cs_lacomm Messages postés 298 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 5 juillet 2013 1
26 sept. 2005 à 14:15
alors tu peux toi-même créer une fonction split.
fais une recherche sur le forum, je me souviens d'avoir soit donné le code, soit la référence pour le trouver. (split n'existe que depuis VB6)
0
cs_lacomm Messages postés 298 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 5 juillet 2013 1
26 sept. 2005 à 14:23
ah sorry, vbCr fait partie des mots de contrôle de la mise en page: retour charriot, vbTab= tabulation, ..
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/vsconstring.asp
0
aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 2
26 sept. 2005 à 15:23
sinon il y a plus simple :

dim monTableau(1 to 5000) as string
for cpt = 1 to 5000
monTableau(cpt) = monFichier.ReadLine()
next

et ton tableau est rempli
(il faut bien sur avoir ouvert ton fichier avan en lecture)

si tu ne connais pas le nombre de lignes dans ton fichier, tu peux faire un tableau dynamique que tu redimensionne dans ta boucle avec un :

redim preserve monTableau(1 to cpt)

vala
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
26 sept. 2005 à 20:21
Si tu doit comparer le fichier par lui même tu devrais faire la comparaison en mode Binaire, si par contre tu doit comparer les infos qui le compse alors oui il te faut un tableau.


Chris...
Web : Firstruner
0
cs_ludo92 Messages postés 7 Date d'inscription lundi 26 septembre 2005 Statut Membre Dernière intervention 29 septembre 2005
27 sept. 2005 à 12:10
merci à tous pour vos reponses
je suis donc passé par un tableau et ca marche nickel

merci pour voir aide
Ludo
0