Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

comparaison de 2 fichiers txt

5 réponses
Avatar
Lupis
Bonjour,
je souhaite comparer le contenu de deux fichiers.txt=20
existant sur un lecteur, et incr=E9menter une variable=20
num=E9rique en cas de diff=E9rence. Je m'y perd un peu avec=20
les instruction compare.
Merci d'avance
;o)

5 réponses

Avatar
le_troll
Bonjour, voici un exemple,
Dim VarFic1 As String
Dim VarFic2 As String
Dim resultat As Byte
Dim difference As Long
'
difference = 0
'
assignation 2 prt + 2 ouvertures fics + 2 lecture fic dans var VarFic1 et
VarFic2
'
resultat = StrComp(VarFic1, VarFic2, 1)
If resultat <> 0 Then difference = difference + 1
'
MsgBox difference
--
Merci, @+, bye, Joe :
----------------------------------------------------------
Avec une hache, celui qui tient le manche a toujours raison.
----------------------------------------------------------


"Lupis" a écrit dans le message de news:
45cc01c3ff6f$ecf02640$
Bonjour,
je souhaite comparer le contenu de deux fichiers.txt
existant sur un lecteur, et incrémenter une variable
numérique en cas de différence. Je m'y perd un peu avec
les instruction compare.
Merci d'avance
;o)
Avatar
ng
Salut,

Veux tu faire la comparaison ligne par ligne ? Octet par octet (Êractère)
?

Voici une solution ligne à ligne :


Private Sub Form_Load()
Dim k As Integer, sBuff As String
Dim tblLignes() As String, tblLignes2() As String, tblTemp() As String
Dim i As Integer, lTotDiff As Long
'ouverture fichier 1
k = FreeFile
Open "C:Documents and SettingsngBureau1.txt" For Binary As #k
sBuff = Space$(LOF(k))
Get #k, , sBuff
Close #k
tblLignes = Split(sBuff & vbCrLf, vbCrLf, , vbTextCompare)

'ouverture fichier 2
k = FreeFile
Open "C:Documents and SettingsngBureau2.txt" For Binary As #k
sBuff = Space$(LOF(k))
Get #k, , sBuff
Close #k
tblLignes2 = Split(sBuff & vbCrLf, vbCrLf, , vbTextCompare)

sBuff = ""

If UBound(tblLignes2) > UBound(tblLignes) Then
'on s'arrange pr que tblLignes soit tjrs le plus grand
tblTemp = tblLignes2
tblLignes2 = tblLignes
tblLignes = tblTemp
Erase tblTemp
End If

For i = 0 To UBound(tblLignes)
If i > UBound(tblLignes2) Then
'hors imite donc diff
lTotDiff = lTotDiff + 1
Else
If tblLignes(i) <> tblLignes2(i) Then lTotDiff = lTotDiff + 1
End If
Next

MsgBox lTotDiff & " différence(s) trouvée(s) !", vbInformation

Erase tblLignes
Erase tblLignes2
End Sub




Faisable aussi à coup de Line Input, mais c'est plus lent.

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
"Lupis" a écrit dans le message de news:
45cc01c3ff6f$ecf02640$
Bonjour,
je souhaite comparer le contenu de deux fichiers.txt
existant sur un lecteur, et incrémenter une variable
numérique en cas de différence. Je m'y perd un peu avec
les instruction compare.
Merci d'avance
;o)
Avatar
lupis
Merci ça m'a bien aidé et j'ai pu terminer mon
programme!!!
ps: avec un flingue celui qui tient le manche de la hache
se calme. :o)
-----Message d'origine-----
Bonjour, voici un exemple,
Dim VarFic1 As String
Dim VarFic2 As String
Dim resultat As Byte
Dim difference As Long
'
difference = 0
'
assignation 2 prt + 2 ouvertures fics + 2 lecture fic


dans var VarFic1 et
VarFic2
'
resultat = StrComp(VarFic1, VarFic2, 1)
If resultat <> 0 Then difference = difference + 1
'
MsgBox difference
--
Merci, @+, bye, Joe :
----------------------------------------------------------
Avec une hache, celui qui tient le manche a toujours


raison.
----------------------------------------------------------


Avatar
lupis
Dans un premier temps une comparaison grossiere me suffit,
mais vu que j'ignorais la procédure pour une comp. ligne
par ligne ton prog va bien m'aider
Merci beaucoup!

-----Message d'origine-----
Salut,

Veux tu faire la comparaison ligne par ligne ? Octet par


octet (Êractère)
?

Voici une solution ligne à ligne :


Private Sub Form_Load()
Dim k As Integer, sBuff As String
Dim tblLignes() As String, tblLignes2() As String, tblTemp


() As String
Dim i As Integer, lTotDiff As Long
'ouverture fichier 1
k = FreeFile
Open "C:Documents and SettingsngBureau1.txt" For


Binary As #k
sBuff = Space$(LOF(k))
Get #k, , sBuff
Close #k
tblLignes = Split(sBuff & vbCrLf, vbCrLf, , vbTextCompare)

'ouverture fichier 2
k = FreeFile
Open "C:Documents and SettingsngBureau2.txt" For


Binary As #k
sBuff = Space$(LOF(k))
Get #k, , sBuff
Close #k
tblLignes2 = Split(sBuff & vbCrLf, vbCrLf, ,


vbTextCompare)

sBuff = ""

If UBound(tblLignes2) > UBound(tblLignes) Then
'on s'arrange pr que tblLignes soit tjrs le plus grand
tblTemp = tblLignes2
tblLignes2 = tblLignes
tblLignes = tblTemp
Erase tblTemp
End If

For i = 0 To UBound(tblLignes)
If i > UBound(tblLignes2) Then
'hors imite donc diff
lTotDiff = lTotDiff + 1
Else
If tblLignes(i) <> tblLignes2(i) Then lTotDiff =


lTotDiff + 1
End If
Next

MsgBox lTotDiff & " différence(s) trouvée(s) !",


vbInformation

Erase tblLignes
Erase tblLignes2
End Sub




Faisable aussi à coup de Line Input, mais c'est plus lent.

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
.



Avatar
ng
ReSalut,

Ok, tu noteras que mon code est case sensitive, pour faire une comparaison
non case sensitive, 3 solutions :

Soit insérer un Option Compare Text au début de ton module
Soit changer If tblLignes(i) <> tblLignes2(i) Then en If
LCase$(LtblLignes(i)) <> LCase$(tblLignes2(i)) Then
Soit changer If tblLignes(i) <> tblLignes2(i) Then en If
StrComp(LtblLignes(i),LtblLignes2(i) , vbTextCompare)=0 Then


--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

lupis a écrit :

Dans un premier temps une comparaison grossiere me suffit,
mais vu que j'ignorais la procédure pour une comp. ligne
par ligne ton prog va bien m'aider
Merci beaucoup!

-----Message d'origine-----
Salut,

Veux tu faire la comparaison ligne par ligne ? Octet par octet
(Êractère) ?

Voici une solution ligne à ligne :


Private Sub Form_Load()
Dim k As Integer, sBuff As String
Dim tblLignes() As String, tblLignes2() As String, tblTemp () As
String Dim i As Integer, lTotDiff As Long
'ouverture fichier 1
k = FreeFile
Open "C:Documents and SettingsngBureau1.txt" For Binary As #k
sBuff = Space$(LOF(k))
Get #k, , sBuff
Close #k
tblLignes = Split(sBuff & vbCrLf, vbCrLf, , vbTextCompare)

'ouverture fichier 2
k = FreeFile
Open "C:Documents and SettingsngBureau2.txt" For Binary As #k
sBuff = Space$(LOF(k))
Get #k, , sBuff
Close #k
tblLignes2 = Split(sBuff & vbCrLf, vbCrLf, , vbTextCompare)

sBuff = ""

If UBound(tblLignes2) > UBound(tblLignes) Then
'on s'arrange pr que tblLignes soit tjrs le plus grand
tblTemp = tblLignes2
tblLignes2 = tblLignes
tblLignes = tblTemp
Erase tblTemp
End If

For i = 0 To UBound(tblLignes)
If i > UBound(tblLignes2) Then
'hors imite donc diff
lTotDiff = lTotDiff + 1
Else
If tblLignes(i) <> tblLignes2(i) Then lTotDiff = lTotDiff + 1
End If
Next

MsgBox lTotDiff & " différence(s) trouvée(s) !", vbInformation

Erase tblLignes
Erase tblLignes2
End Sub




Faisable aussi à coup de Line Input, mais c'est plus lent.

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
.