Page 1 sur 1

comparer 2 fichier txt et ne garder que les differences ?

Publié : lun. 22/août/2005 14:51
par noob
bonjours @ tous :)

Je continu l'exploration de "purebasic" et je bloc a nouveau :cry: , je voudrai comparer 2 fichier txt et en ecrire un 3 eme qui ne contient que les differences!

J'explique:les 2 fichiers txt contiennent chacun une liste de fichiers (creer avec WriteStringN) ==>retour a la ligne(jpense que c mieu pour pouvoir les comparer?)

a partir de la je voudrai creer un 3eme fichier qui ne contient les fichiers differents!!

ex: fichier1.txt
prog1
prog3

fichier2.txt
prog1
prog2

fichier3.txt
prog2
prog3

Un petit peu d'aide ne serai pas de refus !

merci d'avance

Publié : lun. 22/août/2005 16:19
par gilbert2
ok :)

Il faut pour coller a ton exemple lire les deux fichiers avec deux niveaux de rupture. Soit deux tant que (while) imbriqués.

Tu lis le premier fichier et ensuite tu lis le second et tu boucles tant que les deux lignes des fichiers sont equivalente sinon tu ecris ton troisieme fichier.

S'il existe une fonction line input en purebasic ca devrait pas trop te poser de probleme a faire ce que tu souhaites.

A+

Publié : lun. 22/août/2005 16:37
par fweil
Si tu respectes la contrainte de mettre une ligne par valeur, tu devrais facilement pouvoir construire deux tableaux temporaires avec les valeurs triées de chaq tableau pour les comparer et en déduire la liste des éléments identiques ou différents.

Essayes cela, et si tu bloques tu fais signe, je te donnerai un code pour démarrer.

Publié : lun. 22/août/2005 16:39
par Dorian
Bon j'étais en train de trouver mon erreur (très bête en plus mon erreur lol).

Bon je te donne quand même ma version :

Code : Tout sélectionner

op_file1.s=OpenFileRequester("Ouvrir le premier fichier ...","","Fichier texte (*.txt)|*.txt",0)
op_file2.s=OpenFileRequester("Ouvrir le second fichier ...","","Fichier texte (*.txt)|*.txt",0)

OpenFile(1,op_file1)
OpenFile(2,op_file2)
CreateFile(3,SaveFileRequester("Sauver le log ...","log.txt","Fichier texte (*.txt)|*.txt",0))

; traitement du premier fichier
Repeat
  UseFile(1)
  string_file1.s = ReadString()
  UseFile(2)
  FileSeek(0)
  Repeat
    string_file2.s = ReadString()
    If string_file1 = string_file2
      commun.l = 1
    EndIf
  Until Eof(2) Or commun
  If commun = 0
    UseFile(3)
    WriteStringN("Ligne non présente dans le fichier " + GetFilePart(op_file2) + " : " + string_file1)
  EndIf
  commun=0
Until Eof(1)

; réinitilise les 2 fichiers à comparer
UseFile(1)
FileSeek(0)
UseFile(2)
FileSeek(0)

; traitement du second fichier
Repeat
  UseFile(2)
  string_file2.s = ReadString()
  UseFile(1)
  FileSeek(0)
  Repeat
    string_file1.s = ReadString()
    If string_file2 = string_file1
      commun.l = 1
    EndIf
  Until Eof(1) Or commun
  If commun = 0
    UseFile(3)
    WriteStringN("Ligne non présente dans le fichier " + GetFilePart(op_file1) + " : " + string_file2)
  EndIf
  commun=0
Until Eof(2)

MessageRequester("Fini", "Traitement fini")
Sa peut-être simplifiable ^^

Publié : mar. 23/août/2005 11:15
par noob
boujour @ tous

je n'avais pas vu toutes vos reponses donc je vais m'y mettre dès aujourd'hui en tous cas merci pour vos réponses "gilbert2" "fweil" et "Dorian"

Je fais des essais et vous tiens au courant dans l'apres-midi ou demain

Encore une fois merci beaucoup pour votre aide et bonne continuation @ tous ;)