IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

Vbscript - fonction équivalente à diff Unix - comparer 2 fichiers


Sujet :

VBScript

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Novembre 2012
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Vbscript - fonction équivalente à diff Unix - comparer 2 fichiers
    Bonjour,

    Il me semble avoir vu sur ce forum un post qui fournissait le code vbscript pour comparer 2 fichiers et presentait le résultat sous la meme forme que le diff Unix/bash (c'est a dire avec affichage des lignes differentes telles que)

    < N° ligne - Ligne fichier 1
    ----------------
    > N° ligne - Ligne fichier 2

    Ce dernier point est très important pour moi.

    Quelqu'un aurait il le lien ? Je viens de passer QQ heures à chercher sur ce forum sans trouver..

  2. #2
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 839
    Points : 9 222
    Points
    9 222
    Par défaut

    File2Compare: Comparaison de deux Fichiers ligne par ligne
    ou bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    File2Compare "c:\tmp\Fichier1.txt","c:\tmp\Fichier2.txt"
    Function File2Compare(File1,File2)
    Const ForReading = 1, ForWriting = 2 
    Dim objFSO,objSourceFile,objSourceFile2
    Titre ="Fichier à Comparer" 
    Dim bFileNotFound
    bFileNotFound = False
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    If Not objFSO.FileExists(File1) Then
        MsgBox "Le Fichier N°1 n'existe pas, il faut choisir le Fichier N°1",VbExclamation,Titre
        bFileNotFound = True
    ElseIf Not objFSO.FileExists(File2) Then
        MsgBox "Le Fichier N°2 n'existe pas, il faut choisir le Fichier N°2",VbExclamation,Titre
        bFileNotFound = True
    End If
    If Not bFileNotFound Then
    Set objSourceFile = objFSO.OpenTextFile(File1, ForReading)  'Fichier Original
    Set objSourceFile2 = objFSO.OpenTextFile(File2, ForReading) 'Fichier Modifié 
    vrNumLigne = 0
     Do Until objSourceFile.AtEndOfStream Or objSourceFile2.AtEndOfStream
       vrNumLigne = vrNumLigne + 1
       vrLigne = objSourceFile.ReadLine
       vrLigne2 = objSourceFile2.ReadLine
       vrComprLign = StrComp(vrLigne, vrLigne2, 1)
     If vrComprLign = 1 Or vrComprLign = -1 Or IsNull(vrComprLign) Then
       vrNul = "Le fichier n'a pas été modifié"
       vrLignDif = vrLignDif & vrNumLigne & ": " & vrLigne & vbCrLf & vrNumLigne & ": " & vrLigne2 & vbCrLf & vbCrLf
     End If
     Loop
    objSourceFile.Close
    objSourceFile2.Close
    If IsEmpty(vrNul) Then
      MsgBox "Le fichier n'a pas été modifié ,les deux Fichiers sont identiques !",64,Titre
    Else
      'MsgBox vrLignDif,64,Titre
                 Dim fso, f 
                 Set fso = CreateObject("Scripting.FileSystemObject") 
                 Set f = fso.OpenTextFile("comparaison.txt", ForWriting,true)
                 f.WriteLine String(120,"*")
    f.writeline "Résultat de la Comparison entre le fichier " & File1 & " et le fichier "& File2 & vbNewLine    
    f.WriteLine String(120,"*")         
                 f.writeline(vrLignDif)
                 f.close
                 OpenLog("comparaison.txt")
    End If
    End If
    End Function
     
    Sub OpenLog(File)
    Dim ws
    Set ws = CreateObject("wscript.shell")
    ws.run "Notepad " & File,1,False
    Set ws = Nothing
    End Sub

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Novembre 2012
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Merci hackoofr,

    Ta proposition est OK mais ne satisfait pas complétement ma demande.
    En effet, si un décalage existe entre les lignes des 2 fichiers alors le résultat de File2Compare mentionnera toutes les lignes alors que la différence se situe au niveau de la ligne décalée.
    Diff.exe sous bash/unix sait gérer cette problématique (algo de Hunt Mc Illroy)
    J'aurai aimé avoir le meme comportement.

    Donc si tu as déja vu cette implémentation en vb script, je prends !

    Merci

  4. #4
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 415
    Points : 5 806
    Points
    5 806
    Par défaut
    Peut-être que ceci va te donner satisfaction !!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    Option Explicit
     
    Const ForReading = 1, ForWriting = 2, ForAppending = 8, TriStateTrue = -1
    Dim fso, Fich1, Fich2, oFold, WS, Ret1, Ret2, FichDest, Fl1, Fl2, OldF1, OldF2
    ' ================== Initialisation
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set WS = CreateObject("WScript.Shell")
    'Set oFold = fso.GetFolder("Mettre_ici_le_dossier")
    Set Fl1 = fso.GetFile(GetFileName)
    OldF1 = Fl1.Path
    Set fich1 = fso.OpenTextFile(Fl1.Path, ForReading, False)', TriStateTrue)
    Set Fl2 = fso.GetFile(GetFileName)
    OldF2 = Fl2.Path
    Set fich2 = fso.OpenTextFile(Fl2.Path, ForReading, False)', TriStateTrue)
     
    Set FichDest = fso.OpenTextFile("Comparer.txt", ForWriting, True)', TriStateTrue)
    ' ===================
    	AnalyseFich1
    	AnalyseFich2
    	FichDest.Close
    ' ===================
    Function GetFileName()
    	Dim oDlg
    	Set oDlg=CreateObject("UserAccounts.CommonDialog")
        oDlg.Filter="Tous les fichiers(*.*)|*.*|Fichier text(*.txt)|*.txt"
        oDlg.FilterIndex=2
        oDlg.InitialDir="C:"
        oDlg.ShowOpen
    	If oDlg.FileName = "" Then WScript.Quit 0 
    	GetFileName = oDlg.FileName
    	set oDlg= nothing
    End Function
    '=======================
    Private Sub AnalyseFich1()
    	Dim Lig
    	Lig = 0
    	Ret2 = Fich2.ReadAll
    	Do While Not Fich1.AtEndOfStream
    	   Ret1 = Fich1.ReadLine
    	   Lig = Lig + 1
    	   If InStr(1,Ret2,Ret1,1) = 0 Then
    		  FichDest.WriteLine Fl1.Name & " , ligne " & CStr(Lig) & " => " & Ret1
    	   End If	  
    	Loop
    	FichDest.WriteBlankLines 1
    	FichDest.WriteLine String(50,"=")
    	FichDest.WriteBlankLines 1
    	Fich1.Close
    	Fich2.Close
    End Sub
    '=======================
    Private Sub AnalyseFich2()
    	Dim Lig
    	Set fich1 = fso.OpenTextFile(OldF1, ForReading, False)
    	Set fich2 = fso.OpenTextFile(OldF2, ForReading, False)
    	Lig = 0
    	Ret1 = Fich1.ReadAll
    	Do While Not Fich2.AtEndOfStream
    	   Ret2 = Fich2.ReadLine
    	   Lig = Lig + 1
    	   If InStr(1,Ret1,Ret2,1) = 0 Then
    		  FichDest.WriteLine Fl2.Name & " , ligne " & CStr(Lig) & " => " & Ret2
    	   End If	  
    	Loop
    	Fich1.Close
    	Fich2.Close
    End Sub
    Le fichier de sortie "Comparer.txt" contient les différences entre les 2 fichiers à comparer et s'il est vide, c'est qu'il n'y a pas de différence à un saut de ligne près.
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/09/2006, 16h09
  2. Fonction c qui compare deux fichiers ???
    Par babyface dans le forum C
    Réponses: 4
    Dernier message: 19/11/2005, 13h07
  3. fonction réduisant la taille d'un fichier
    Par Harry_polin dans le forum C
    Réponses: 22
    Dernier message: 27/11/2003, 13h56
  4. [LG][FAQ]comparer des fichiers
    Par lucke dans le forum Langage
    Réponses: 11
    Dernier message: 01/06/2003, 18h02
  5. Comparer des fichiers de données : Quel Langage ?
    Par Anonymous dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 24/04/2002, 22h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo