rudyperray
Messages postés7Date d'inscriptionmardi 17 mai 2005StatutMembreDernière intervention 3 juin 2007
-
17 mai 2005 à 12:35
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 2019
-
20 mai 2005 à 20:16
Bonjour,
Etant novice en VB, je voudrais comparer deux fichiers textes (qui
fonctionnes par lignes) et faire afficher le résultat dans un autre
fichier texte en surlignant les différences (exemple jaune 1er fichier
et rouge 2ème fichier)
cs_cmora
Messages postés34Date d'inscriptionjeudi 7 avril 2005StatutMembreDernière intervention10 juin 20051 17 mai 2005 à 12:49
pour ouvrir 2fichiers textes
dim fichier_essai as string 'premier fichier
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFile(fichier_essai)
Set stm = f.OpenAsTextStream(1, -2)
dim fichier_essai2 as string 'premier fichier
Set fso2 = CreateObject("Scripting.FileSystemObject")
Set f2 = fso2.GetFile(fichier_essai2)
Set stm2 = f2.OpenAsTextStream(1, -2)
With stm
Do While .AtEndOfStream <> True 'pour parcourir un fichier jusqua la fin
Loop
.Close 'pour le fermer
End With
Set stm = Nothing 'pour libérer
Set fso = Nothing
tu connais tout... tu n'as plus qu'a faire tes comparaisons...
et pour tes histoires de couleur, il faut savoir ou tu veux afficher tes fichiers textes...
rudyperray
Messages postés7Date d'inscriptionmardi 17 mai 2005StatutMembreDernière intervention 3 juin 2007 17 mai 2005 à 16:32
Merci de m'avoir répondu!!
Mais ce code ne me permet que d'ouvrir les deux fichiers mais comment
fais je pour les comparer et obtenir les différences dans un autre
fichier texte 3 avec les lignes différentes surlignés (ligne du fichier
1-->jaune et ligne fichier 2 différente -->rouge)
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 19 mai 2005 à 21:27
je sais pas si ça marche sous VBA (excel) ?
tu peux remplacer les ListView par des ListBox,
le but c'est de les remplir avec les lignes de chacun des fichiers et de les trier (si elles sont pas déjà triées)
le tri est indispensable à cause de la recherche dichotomique.
le StrComp() c'est une comparaison de 2 chaînes qui est très rapide
renvoie 0 si égal, 1 si plus grand, -1 si plus petit
peut être remplacé par IF chaine1 > chaine2 then ....
le problème c'est les CheckBoxes, tu peux les remplacer par heu!!!
... écrire directement les différences dans le fichier résultat,
attention il y a 2 cas, soit présence dans l'une pour le premier
passage, soit présence dans l'autre pour le deuxième passage.
chaque Ligne est considérée comme un ensemble, si elle est différente,
elle sort en erreur, même si un seul caractère différent, dans ce cas
là il y a 2 lignes qui devraient sortir.
tu peux aussi mettre les fichiers en Table, mais faut programmer le tri (si nécessaire)
tu peux aussi remplacer la recherche dichotomique par un balayage total, mais ça risque d'être Long.
si les fichiers sont triés au départ, tu peux faire un avancement de
fichiers, c'est à dire Lire les deux fichiers en parallèles.
'un bouton pour lancer
Private Sub CmdCompare_Click()
Compare ListView1, ListView2
Compare ListView2, ListView1
End Sub
Private Sub Compare(List1 As ListView, List2 As ListView)
Dim i As Integer
Dim j As Integer
Dim P As Integer
Dim G As Integer
Dim M As Integer
Dim s As String
For i = 1 To List1.ListItems.Count
s = List1.ListItems(i) P 1: G List2.ListItems.Count
While P < G
M = (P + G) \ 2
j = StrComp(s, List2.ListItems(M), vbTextCompare) If j 1 Then P M + 1 Else G = M
Wend
j = StrComp(s, List2.ListItems(P), vbTextCompare)
If j <> 0 Then List1.ListItems(i).Checked = True
Next
End Sub
Mais en compilant avec Visual Basic, il me sort cette erreur