Comparaison de deux fichiers textes

rudyperray Messages postés 7 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 3 juin 2007 - 17 mai 2005 à 12:35
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 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)





merci beaucoup

7 réponses

cs_cmora Messages postés 34 Date d'inscription jeudi 7 avril 2005 Statut Membre Dernière intervention 10 juin 2005 1
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...
0
rudyperray Messages postés 7 Date d'inscription mardi 17 mai 2005 Statut Membre Derniè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)
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
17 mai 2005 à 17:27
mettre chacun des fichiers dans une ListView avec Checkboxes.

réponse:

- Checked si présence dans l'une et pas dans l'autre

- Unchecked si ligne identique dans les deux



je pense pas qu'on puisse écrire des fichiers texte avec couleurs





Private Sub Form_Load()

ListView1.View = 3

ListView1.Checkboxes = True

ListView1.ColumnHeaders.Add , , "LISTE 1", ListView1.Width

ListView1.Sorted = True

ListView1.ListItems.Add , , "DDD"

ListView1.ListItems.Add , , "AAA"

ListView1.ListItems.Add , , "CCC"



ListView2.View = 3

ListView2.Checkboxes = True

ListView2.ColumnHeaders.Add , , "LISTE 2", ListView1.Width

ListView2.Sorted = True

ListView2.ListItems.Add , , "AAA"

ListView2.ListItems.Add , , "BBB"

ListView2.ListItems.Add , , "CCC"

End Sub



'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


Daniel
0
rudyperray Messages postés 7 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 3 juin 2007
18 mai 2005 à 19:43
Merci pour la réponse!!!

Mais puis-je exécuter sous excel comme une VBA



merci
0

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

Posez votre question
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
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.


Daniel
0
rudyperray Messages postés 7 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 3 juin 2007
20 mai 2005 à 18:32
Merci de m'avoir répondu!!



j'ai essayer le code VB suivant


Private Sub Form_Load()
ListView1.View = 3
ListView1.Checkboxes = True
ListView1.ColumnHeaders.Add , , "LISTE 1", ListView1.Width
ListView1.Sorted = True
ListView1.ListItems.Add , , "DDD"
ListView1.ListItems.Add , , "AAA"
ListView1.ListItems.Add , , "CCC"

ListView2.View = 3
ListView2.Checkboxes = True
ListView2.ColumnHeaders.Add , , "LISTE 2", ListView1.Width
ListView2.Sorted = True
ListView2.ListItems.Add , , "AAA"
ListView2.ListItems.Add , , "BBB"
ListView2.ListItems.Add , , "CCC"
End Sub

'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



"Erreur de compilation

Type défini par l'utilisateur non défini"



??????



merci
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
20 mai 2005 à 20:16
Rem 2 ListBox List1 et List2

' en mode design:

' List1.Sorted = True

' List2.Sorted = True

' List1.MultiSelect = 1

' List2.MultiSelect = 1

Rem un Bouton CmdCompare pour lancer



Private Sub Form_Load()



'remplir la première ListBox

List1.AddItem "AAA"

List1.AddItem "DDD"

List1.AddItem "EEE"

List1.AddItem "HHH"

List1.AddItem "XXX"



'remplir la deuxième ListBox

List2.AddItem "AAA"

List2.AddItem "BBB"

List2.AddItem "CCC"

List2.AddItem "FFF"

List2.AddItem "HHH"

List2.AddItem "ZZZ"



End Sub



Private Sub CmdCompare_Click()

Dim i As Integer



Compare List1, List2

Compare List2, List1



'différences dans la première

' For i = 0 To List1.ListCount - 1

' If List1.Selected(i) = True Then MsgBox List1.List(i)

' Next



'différences dans la deuxième

' For i = 0 To List2.ListCount - 1

' If List2.Selected(i) = True Then MsgBox List2.List(i)

' Next



End Sub



Private Sub Compare(List1 As ListBox, List2 As ListBox)

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 = 0 To List1.ListCount - 1

s = List1.List(i)

P 0: G List2.ListCount - 1

While P < G

M = (P + G) \ 2

j = StrComp(s, List2.List(M), vbTextCompare)

If j 1 Then P M + 1 Else G = M

' pour remplacer les 2 lignes précédentes

' If s > List2.List(M) Then P M + 1 Else G M

Wend

j = StrComp(s, List2.List(P), vbTextCompare)

If j <> 0 Then List1.Selected(i) = True

' pour remplacer les 2 lignes précédentes

' If s <> List2.List(P) Then List1.Selected(i) = True

Next



End Sub



j'ai remplacé les ListView par des ListBox

et les CheckBoxes par la sélection multiple

et le StrComp() est remplacable par les lignes qui suivent


Daniel
0
Rejoignez-nous