Lister les différences entre les lignes de 2 fichiers texte, y compris de longueur inégale

Contenu du snippet

Une forme et 2 boutons de commande
Private Sub Command1_Click()
  'juste pour constituer 2 fhiers de travail (ne lancer donc q'une fois)
  Randomize
  On Error Resume Next
  f1 = "d:\testA.txt"       '| je ne fais ici que
  f2 = "d:\testB.txt"       '| créer 2 petits fichiers
  Kill "d:\testA.txt"       '| qui vont me servir à tester
  Kill "d:\testB.txt"
  Open f1 For Output As #2
  Open f2 For Output As #1
  For i = 1 To 7
    Print #1, i & " " & Int((3 * Rnd) + 1)
  Next
  For i = 1 To 10
    Print #2, i & " " & Int((3 * Rnd) + 1)
  Next
  Close #1
  Close #2
End Sub

Private Sub Command2_Click()
  On Error Resume Next 'hélàs inévitable car un fichier risque d'avoir plus de lignes que l'autre
  Dim f1 As String, f2 As String, f3 As String, nb As Integer, couic As Boolean
  Dim du1 As String, du2 As String, toto As String
  f1 = "d:\testA.txt"    '| les deux fichiers à
  f2 = "d:\testB.txt"    '| comparer
  f3 = "d:\RESUL.txt"   ' le fichier d'enregistrement des résultats de la comparason
  Kill f3
  DoEvents
  Open f1 For Input As #1
  Open f2 For Input As #2
  Open f3 For Output As #3
  nb = 1
  Print #3, "lignes communes différente entre " & f1 & " et " & f2
  While Not (EOF(2) And EOF(1))
   On Error Resume Next
   du1 = "": du2 = ""
   Line Input #2, du2
   Line Input #1, du1
   If Not couic Then
     Select Case du1 & du2
       Case Is = du1
         toto = f1
         couic = True
       Case Is = du2
         toto = f2
         couic = True
     End Select
     If couic Then Print #3, "lignes présentes uniquement dans " & toto
   End If
   If du1 <> du2 Then
     If Not couic Then
       Print #3, "ligne " & nb & " disant " & du1 & " dans " & f1; " et " & du2 & " dans " & f2
     Else
       Print #3, "ligne " & nb & " disant " & du1 & du2
     End If
   End If
   nb = nb + 1
  Wend
  Close #1
  Close #2
  Close #3
End Sub



Compatibilité : VB6, VBA

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.