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 :

Extraire la différence entre 2 fichiers


Sujet :

VBScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2009
    Messages : 85
    Par défaut Extraire la différence entre 2 fichiers
    Bonjour à tous,

    je souhaite comparer les données de 2 fichiers .txt et extraire la différence dans un 3ème fichier.

    Voilà comment je pense faire:

    je lis la 1 ere ligne du fichier 1 et je la recherche dans le fichier 2
    1=>si je la trouve, je passe à la ligne suivante
    2=>si non, je la copie dans le 3 ème fichier

    Je sais comparer des données avec le if existe mais Comment puis-je lire ligne par ligne le fichier 1?

    Merci de me diriger vers la bonne solution

  2. #2
    Membre expérimenté
    Inscrit en
    Mai 2008
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 189
    Par défaut
    La methode ReadALL du filesystemobject permet de lire un fichier dans son ensemble, la méthode ReadLine permet de lire ligne par ligne.

    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Const ForReading = 1
     
     
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFile = objFSO.OpenTextFile("C:\Scripts\Test.txt", ForReading)
     
    Do Until objFile.AtEndOfStream
        ligne = objFile.ReadLine
        wscript.echo ligne
    Loop
     
    objFile.Close

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2009
    Messages : 85
    Par défaut
    Voilà ce que j'ai fait mais ca me copie tout au lieu des lignes manquantes

    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
    Const ForReading = 1, ForWriting = 2, ForAppending = 8 
     
    Dim fso, f , f1, f2
    Dim st ,st1
     
    Set objDictionary = CreateObject("Scripting.Dictionary")
     
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set f = fso.OpenTextFile("C:\Test.txt", ForReading)
    Set f1 = fso.OpenTextFile("C:\Test1.txt", ForReading)
    Set f2 = fso.CreateTextFile("c:\test2.txt") 
    Do Until f.AtEndOfStream
        ligne = f.ReadLine
     
    If Not objDictionary.Exists(ligne) Then
    objDictionary.Add ligne, ligne
    End If
    Loop
     
    f.Close
    f1.Close
    f2.Close
     
    Set f2 = fso.OpenTextFile("c:\test2.txt", ForWriting)
     
    For Each strKey in objDictionary.Keys
    f2.WriteLine strKey
    Next
     
    f2.Close

  4. #4
    Membre expérimenté
    Inscrit en
    Mai 2008
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 189
    Par défaut
    A première vue, tu ouvre 2 fichiers, mais tu ne les compare pas ligne par ligne, tu compare les ligne de l'un avec un dictionnaire (vide).

    Il doit juste manquer de remplir le dictionnaire avec les lignes du fichier à comparer...

    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
    Const ForReading = 1, ForWriting = 2, ForAppending = 8 
     
    Dim fso, f , f1, f2
    Dim st ,st1
     
    Set objDictionary = CreateObject("Scripting.Dictionary")
     
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set f = fso.OpenTextFile("C:\Test.txt", ForReading)
    Set f1 = fso.OpenTextFile("C:\Test1.txt", ForReading)
    Set f2 = fso.CreateTextFile("c:\test2.txt") 
    '-------------------------------------------
    ' ici la partie rajoutée
    Do Until f1.AtEndOfStream
    	ligne = f1.ReadLine
    	objDictionary.Add ligne, ligne
    Loop
    '-------------------------------------------
    Do Until f.AtEndOfStream
        ligne = f.ReadLine
    	If Not objDictionary.Exists(ligne) Then
    		objDictionary.Add ligne, ligne
    	End If
    Loop
     
    f.Close
    f1.Close
    f2.Close
     
    Set f2 = fso.OpenTextFile("c:\test2.txt", ForWriting)
     
    For Each strKey in objDictionary.Keys
    	f2.WriteLine strKey
    Next
     
    f2.Close

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2009
    Messages : 85
    Par défaut
    Ok ca me met les lignes qui n'existent pas dans le test2 mais aussi celles qui existent.

    c'est la différence que je souhaite.

    je pensais supprimer les données existantes. Quelle est la commande pour supprimer les lignes. ( objDictionary.erase ligne ? )

  6. #6
    Membre expérimenté
    Inscrit en
    Mai 2008
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 189
    Par défaut
    dans l'état c'est la différence que tu es sensé récupères.

    Il regarde les lignes de F1, et ce qui n'est pas dans F est stocké dans F2.

    Donc F2 ne contient que les différence...



    Peut etre voulait tu regarder les ligne de F et les comparer à F1 ?

    auquel cas, tu n'as qu'as mettre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set f1 = fso.OpenTextFile("C:\Test.txt", ForReading)
    Set f = fso.OpenTextFile("C:\Test1.txt", ForReading)
    a la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set f = fso.OpenTextFile("C:\Test.txt", ForReading)
    Set f1 = fso.OpenTextFile("C:\Test1.txt", ForReading)
    en conservant le reste du code

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

Discussions similaires

  1. extraire les différences entre deux fichiers xml en python
    Par princessita dans le forum Général Python
    Réponses: 4
    Dernier message: 17/02/2014, 00h09
  2. Réponses: 9
    Dernier message: 12/07/2011, 17h25
  3. extraire la différence entre deux larges fichiers
    Par gwissem dans le forum Programmation et administration système
    Réponses: 6
    Dernier message: 11/12/2008, 16h09
  4. Outils sur les différences entre deux fichiers XML
    Par Community Management dans le forum XML/XSL et SOAP
    Réponses: 19
    Dernier message: 21/07/2008, 15h21
  5. Différence entre deux fichiers
    Par Celelibi dans le forum Langage
    Réponses: 4
    Dernier message: 26/04/2006, 17h36

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