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

Langage Pascal Discussion :

[LG][FAQ]comparer des fichiers


Sujet :

Langage Pascal

  1. #1
    Candidat au Club
    Inscrit en
    Avril 2003
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 8
    Points : 4
    Points
    4
    Par défaut [LG][FAQ]comparer des fichiers
    Salut à tous g un petit probleme pour comparer deux fichiers contenant des chaines de caracteres. Lorsqu'il y a une différence au milieu du fichier, tous la suite se decale on a donc toute la suite qui est différente, voici mon code, j'espere que vous pourrez me dire ce qu'il faut modifier pour pouvoir afficher juste le morceau différent

    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
    assign(f1,'fichier1.txt');
    reset(f1);
    assign(f2,'fichier2.txt');(**le fichier 2 est le nouveau fichier**)
    reset(f2);
     
    repeat
    readln(f1,s1);
    readln(f2,s2);
    if s1 = s2 then
        begin
        end
    else
        begin
        writeln (s2);
    end;
    until eof(f2);
    merci d'avance

  2. #2
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 929
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 929
    Points : 59 395
    Points
    59 395
    Billets dans le blog
    2
    Par défaut
    Salut !

    Pour une question de performances, il est préférable de comparer tes fichiers en deux fois :

    1. Chercher dans le fichier 1 toutes les lignes qui n'existent pas dans le fichier 2 : il s'agit donc de lignes supprimées ou bien modifiées;
    2. En passant les lignes que tu viens de trouver, chercher dans le fichier 2 toutes les lignes qui n'existent pas dans le fichier 1 : il s'agit donc de nouvelles lignes.

    Pour terminer, deux petites remarques à propos de ton extrait de code :

    1. N'oublie pas de fermer tes deux fichiers (Close);

    2. Pour tester la fin de fichier, il est préférable d'utiliser une boucle While not EOF(f) do plutôt que Repeat ... Until EOF(f).
    Car un fichier peut être vide !

    Bonne prog !
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  3. #3
    Candidat au Club
    Inscrit en
    Avril 2003
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    En fait il n'y a que le fichier2 qui va changé et il n'y aura que des ajouts
    merci

  4. #4
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Tu nous dit que seul le fichier 2 va être modifié par ajout de lignes ? Je pense dans ce cas qu'il te suffit de ne lire une ligne dans le fichier 1 qu'au besoin.

    Un peu comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    while not Eof(f1) and not Eof(f2) do
      begin
      ReadLn(f1, L1);
      repeat
      ReadLn(f2, L2);
      if L1 <> L2 then WriteLn&#40;L2&#41;;
      until &#40;L1 = L2&#41; or Eof&#40;f2&#41;;
      end;
    Je pense que ça devrait faire un truc correct.

    A+
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

  5. #5
    Candidat au Club
    Inscrit en
    Avril 2003
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Je n'ai que la premiere ligne différentequi apparait avec ton truc mais merci quand meme.

    Bonne prog

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 52
    Points : 75
    Points
    75
    Par défaut
    Comme je ne voyais pas d'erreur dans le code de HDD34, j'ai fait un test: la boucle me paraît correcte.

    Le seul bémol se produirait quand la dernière ligne du fichier2 n'est pas dans le fichier1 ? Si tu as le même soucis, en attendant de trouver une explication rationnelle, tu peux mettre ---FIN--- sur la dernière ligne de chacun des fichiers.


    Vérifie le contenu des fichiers: crée le fichier1, fais une copie, puis insère plusieurs lignes en différents endroits...

    Dans mon test, f1 et f2 sont de type TEXT.
    J'ai mis les deux fichiers en C:\ et utilisé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    assign&#40;f1,'c&#58;\fichier1.txt'&#41;;
    assign&#40;f1,'c&#58;\fichier1.txt'&#41;;

  7. #7
    Candidat au Club
    Inscrit en
    Avril 2003
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 8
    Points : 4
    Points
    4
    Par défaut [resolu]
    G juste remis le mot --fin-- à la fin de chaque fichier et maintenant ca marche merci beaucoup a tous de m'avoir aider.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 52
    Points : 75
    Points
    75
    Par défaut
    Reste que je ne comprends pas pourquoi... Manque-t-il un retour chariot ?
    Si quelqu'un a la réponse... Merci d'avance.

  9. #9
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 929
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 929
    Points : 59 395
    Points
    59 395
    Billets dans le blog
    2
    Par défaut
    Ce n'est pas un problème de retour chariot :

    si F2 contient une ligne supplémentaire, la boucle s'arrête avant (la condition Until (L1 = L2) est remplie à la dernière ligne de F1 et à l'avant-dernière ligne de F2).
    Ensuite, la condition EOF(F1) est vraie et le programme s'arrête sans jamais avoir lu la ligne supplémentaire de F2.

    Tandis qu'en ajoutant 'fin' dans les deux fichiers, la dernière ligne de F1 est toujours égale à la dernière ligne de F2 et la boucle s'arrête sans qu'aucune ligne ait été oubliée.

    A bientôt !
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 52
    Points : 75
    Points
    75
    Par défaut
    Merci

  11. #11
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Tu peux aussi trouver un moyen de corriger le bug sans avoir à passer par une astuce peu avouable ...

    Je ne vais pas tout faire non plus ! lol

    A+
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 52
    Points : 75
    Points
    75
    Par défaut
    Effectivement... suite à la réponse d'Alcatîz j'avais trouvé comment éviter la ligne --- FIN --- dans chacun des fichiers

    J'en profite pour te faire part de mon admiration pour ta maîtrise du Pascal, de l'assembleur et du PC dont tu fais bénificier ce forum.

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

Discussions similaires

  1. Comparer des fichiers PDF
    Par fanico11 dans le forum Microsoft Office
    Réponses: 1
    Dernier message: 04/10/2011, 12h48
  2. Comparer des fichiers
    Par hebus44 dans le forum Entrée/Sortie
    Réponses: 0
    Dernier message: 25/11/2007, 12h52
  3. Réponses: 1
    Dernier message: 10/09/2006, 17h09
  4. Comment comparer des fichiers sur Windows?
    Par programmerPhil dans le forum Autres Logiciels
    Réponses: 9
    Dernier message: 22/02/2006, 21h47
  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, 23h37

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