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 :

Comparer/fusionner le contenu de 2 fichiers txt


Sujet :

VBScript

  1. #1
    Membre à l'essai
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Décembre 2010
    Messages : 26
    Points : 19
    Points
    19
    Par défaut Comparer/fusionner le contenu de 2 fichiers txt
    Bonjour,

    Je suis absolument débutant en script, je suis un peu perdu, suite à pas mal de recherches, je ne trouve pas mon bonheur mais je pense que ça n'est pas très compliqué.

    Je cherche à comparer un fichier 1 et un fichier 2 dans un fichier 3.
    Le fichier 3 ne devra contenir que les lignes uniquement présentes dans le fichier 1.
    Le script doit donc vérifier pour chaque ligne du fichier 1, si elle existe dans le fichier 2, si elle n'existe pas, on note cette ligne dans le fichier résultat.
    L'emplacement des fichiers est C:\tmp\ et ils sont au format *.txt

    *Exemple*
    Fichier1 :
    texte1
    texte2
    texte2
    texte3

    Fichier2:
    texte1
    texte1
    texte3
    texte4

    Fichier3 (résultat):
    texte2
    texte2


    Merci de votre aide

  2. #2
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 088
    Points : 16 655
    Points
    16 655
    Par défaut
    Salut

    Un peu de recherche avec le mot "comparer" t'aurai permis de tomber sur File2Compare: Comparaison de deux Fichiers ligne par ligne
    pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 840
    Points : 9 224
    Points
    9 224
    Par défaut
    et parce qu'il y a pas mal de discussions qui répondent à votre requête
    Un exemple parmi d'autres : File2Compare: Comparaison de deux Fichiers ligne par ligne ou bien comparer deux fichier .txt

    Bonne Continuation

  4. #4
    Membre à l'essai
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Décembre 2010
    Messages : 26
    Points : 19
    Points
    19
    Par défaut
    Merci mais j'avais déjà trouvé ces 2 fils de discussion.
    Vous n'avez pas lu mon post, ce n'est pas le résultat que je recherche.
    Ca n'est pas vraiment une comparaison a proprement parler, pour faire ça sinon j'utilise Notepad++ qui le fait très bien tout seul.
    Je veux un vbs que je pourrais exécuter en tache planifiée tous les jours, en fonction de mes 2 fichiers.

    Post initial modifié pour plus de clarté

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 840
    Points : 9 224
    Points
    9 224
    Par défaut

    Testez ce
    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("c:\tmp\comparaison.txt", ForWriting,true)
                 f.WriteLine String(120,"*")
    f.writeline Now &" Résultat de la Comparaison entre le fichier " & File1 & " et le fichier "& File2 & vbNewLine    
    f.WriteLine String(120,"*")         
                 f.writeline(vrLignDif)
                 f.close
                 Call OpenLog("c:\tmp\comparaison.txt")
    End If
    End If
    End Function
     
    Sub OpenLog(File)
    Dim ws
    Set ws = CreateObject("wscript.shell")
    ws.run "Notepad " & File,1,True
    Set ws = Nothing
    End Sub

  6. #6
    Membre à l'essai
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Décembre 2010
    Messages : 26
    Points : 19
    Points
    19
    Par défaut
    Merci mais votre script me donne exactement le même résultat que votre programme en "hta", c'est la même chose.

    Le résultat de votre script me donne :
    ************************************************************************************************************************
    09/07/2012 21:55:53 Résultat de la Comparaison entre le fichier c:\tmp\Fichier1.txt et le fichier c:\tmp\Fichier2.txt

    ************************************************************************************************************************
    2: texte2
    2: texte1

    3: texte2
    3: texte3

    4: texte3
    4: texte4
    Alors que j’attends un résultat comme celui ci :
    texte2
    texte2
    Ce qui n'est pas vraiment la même chose. Il me faut un fichier "propre" sans numérotation de ligne, sans en-tête, et avec uniquement les lignes du fichier 1 n'existant pas dans le fichier 2 (écrit dans le fichier 3 de résultat)
    Du coup je ne vois pas trop comment adapter votre script vu que je ne comprend pas grand chose et que visiblement le résultat n'est pas du tout le même.

  7. #7
    Membre à l'essai
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Décembre 2010
    Messages : 26
    Points : 19
    Points
    19
    Par défaut
    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
    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é 
     Do Until objSourceFile.AtEndOfStream Or objSourceFile2.AtEndOfStream
       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("c:\tmp\comparaison.txt", ForWriting,true)      
                 f.writeline(vrLignDif)
                 f.close
    End If
    End If
    End Function
    J'ai apporter des modifs pour avoir un fichier sans en-tête ni numérotation, ni ouverture du résultat.
    Il me reste cependant un problème de taille, le résultat n'est pas celui escompté, et il y a des retour à la ligne que j'aimerais supprimer.
    Voici ce que donne le script actuellement :
    texte2
    texte1

    texte2
    texte3

    texte3
    texte4

    Quelqu'un a t'il une idée pour avoir le bon résultat et la suppression des retour à la ligne ? On s'approche de la solution

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 840
    Points : 9 224
    Points
    9 224
    Par défaut
    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
    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é 
     Do Until objSourceFile.AtEndOfStream Or objSourceFile2.AtEndOfStream
       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 & vrLigne & vbCrLf & vrLigne2 & 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("c:\tmp\comparaison.txt", ForWriting,true)      
                 f.writeline(vrLignDif)
                 f.close    
    End If
    End If
    End Function

  9. #9
    Membre à l'essai
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Décembre 2010
    Messages : 26
    Points : 19
    Points
    19
    Par défaut
    Vous n'avez pas modifié le script... le résultat n'est toujours pas bon.
    Pourquoi me renvoyer toujours la même chose ?

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 840
    Points : 9 224
    Points
    9 224
    Par défaut
    Citation Envoyé par klef63 Voir le message
    Quelqu'un a t'il une idée pour avoir le bon résultat et la suppression des retour à la ligne ?
    Pourquoi me renvoyer toujours la même chose ?
    le retour à la ligne ne marche pas ? vous n'obtenez pas ceci comme résultat:
    texte2
    texte1
    texte2
    texte3
    texte3
    texte4

  11. #11
    Membre à l'essai
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Décembre 2010
    Messages : 26
    Points : 19
    Points
    19
    Par défaut
    Si si le retour à la ligne fonctionne, sauf que le résultat doit être le suivant :
    texte2
    texte2
    Le résultat n'est donc pas bon

  12. #12
    Membre confirmé Avatar de pitchalov
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 340
    Points : 582
    Points
    582
    Par défaut
    Bonjour,

    La demande n'est pas une comparaison de fichiers. Si j'ai bien compris, ce que tu veux, c'est "afficher toutes les lignes du fichier 1 non présentes dans le fichier 2", c'est ça?

    Si c'est le cas, voici le code :
    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
    Const ForReading = 1
    Const strSrcFile1 = "Chemin\T1.txt", strSrcFile2 = "Chemin\T2.txt", strTrgtFile = "Chemin\T3.txt"
    Set objFso = CreateObject("Scripting.FileSystemObject")
    Set objSrcFile2ContentDic = CreateObject("Scripting.Dictionary")
    objSrcFile2ContentDic.CompareMode = vbTextCompare
    Set objSrcFile = objFso.OpenTextFile(strSrcFile2, ForReading)
    intLineCounter = 1
    Do Until objSrcFile.AtEndOfStream
    	strTmpLine = Trim(objSrcFile.ReadLine)
    	If (NOT strTmpLine = "") AND (NOT objSrcFile2ContentDic.Exists(strTmpLine)) Then objSrcFile2ContentDic.Add strTmpLine, intLineCounter
    	intLineCounter = intLineCounter + 1
    Loop
    objSrcFile.Close
    Set objSrcFile = objFso.OpenTextFile(strSrcFile1, ForReading)
    Set objTrgtFile = objFso.CreateTextFile(strTrgtFile)
    Do Until objSrcFile.AtEndOfStream
    	strTmpLine = Trim(objSrcFile.ReadLine)
    	If (NOT strTmpLine = "") AND (NOT objSrcFile2ContentDic.Exists(strTmpLine)) Then objTrgtFile.WriteLine(strTmpLine)
    Loop
    objSrcFile.Close
    objTrgtFile.Close
    Ce code est bien moins évolué que celui de hackoofr (pas de tests d'existence des fichiers, pas d'affichage, ...) mais fait ce que tu demandes si j'ai bien compris.
    A toi ensuite de le rendre propre.

    Bonne continuation.

  13. #13
    Membre à l'essai
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Décembre 2010
    Messages : 26
    Points : 19
    Points
    19
    Par défaut
    pitchalov
    C'est exactement ce que je voulais

    Un grand à tous les 2 !

    Bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comparer le contenu de 2 fichiers txt
    Par romain_t dans le forum C
    Réponses: 5
    Dernier message: 22/10/2010, 13h35
  2. effacer le contenu d'un fichier .txt
    Par masterix59 dans le forum C
    Réponses: 10
    Dernier message: 18/12/2006, 19h42
  3. Réponses: 4
    Dernier message: 26/06/2006, 11h41
  4. Réponses: 1
    Dernier message: 14/04/2006, 16h51
  5. [VB6] Contenu d'un fichier txt
    Par Sytchev3 dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 28/03/2006, 16h07

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