C/C++ projet command unix diff en C

A

Anonymous

Invité
#1
Bonjour a tous je vous écrit car j'ai besoin de vous qui été pour la plupart de très bon codeur,

Il y en a t'il qui on déjà recoder la commande Unix diff : http://unixhelp.ed.ac.uk/CGI/man-cgi?diff

Si oui je ne cracherai pas dessus et même si se n'est pas en C ou C++ ce n'est pas grave.

Je vous remercie.
 
A

Anonymous

Invité
#2
Tu veut la recoder dans un programme ou le mettre dans ton cmd ?
 
A

Anonymous

Invité
#3
Non il faut que je refasse la fonction diff en gros j'en fais un exe et je l'exécute dans le cmd ou le terminal unix en lui donnant 2 fichiers et il doit me donner le meme résultat que la commande diff d'origine.
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#4
et il te faut aussi les options ?
 
A

Anonymous

Invité
#5
Tu peut nous montrer visuellement ce que la commande donne quand on la tape sans options ?

( Je pense que le plus casse bonbons sa va être les options ... )
 
A

Anonymous

Invité
#6
Pour le moment les options je m'en fout un peu et pour te montrer voici un exemple :

1.txt :

a
b
e
d


2.txt :

b
c
d
r


MacBook-Pro-de-Quentin:Desktop Quentin$ diff 1.txt 2.txt
1d0
< a
3c2
< e
---
> c
4a4
> r



Voici un exemple 'a' correspond a append pour un rajout de texte, 'c' change un changement et 'd' delete pour un effacement.
 
A

Anonymous

Invité
#7
Ah putain bien compliquer sa .. -_- donc tu veut faire une appli qui refait la même chose de préférence en C pour la compatibilité ?
 
A

Anonymous

Invité
#8
C'est pas je veut c'est je dois et pour lundi prochain
 
A

Anonymous

Invité
#9
Bah on va pas te laisser dans la merde ah :p !
On va essayer de faire sa en .net sa doit pas être trop compliquer !
 
A

Anonymous

Invité
#10
C'est simpa de votre part moi j'essaye absolument de le faire avancé.
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#11
regarde ici sur l'exemple avec fget http://www.siteduzero.com/tutoriel-3-14 ... #ss_part_2

Code:
#define TAILLE_MAX 1000 // Tableau de taille 1000
 
int main(int argc, char *argv[])
{
    FILE* fichier = NULL;
    char chaine[TAILLE_MAX] = ""; // Chaîne vide de taille TAILLE_MAX
 
    fichier = fopen("test.txt", "r");
 
    if (fichier != NULL)
    {
        fgets(chaine, TAILLE_MAX, fichier); // On lit maximum TAILLE_MAX caractères du fichier, on stocke le tout dans "chaine"
        printf("%s", chaine); // On affiche la chaîne
 
        fclose(fichier);
    }
 
    return 0;
}
--->

Code:
#define TAILLE_MAX 1000 // Tableau de taille 1000
 
int main(int argc, char *argv[])
{
    FILE* fichier1 = NULL;
    char chaine1[TAILLE_MAX] = ""; // Chaîne vide de taille TAILLE_MAX
 
    fichier1 = fopen("test1.txt", "r");

    FILE* fichier2 = NULL;
    char chaine2[TAILLE_MAX] = ""; // Chaîne vide de taille TAILLE_MAX
 
    fichier2 = fopen("test2.txt", "r");

 
    if ((fichier1 != NULL) && (fichier2 != NULL))
    {
        fgets(chaine1, TAILLE_MAX, fichier1); // On lit maximum TAILLE_MAX caractères du fichier, on stocke le tout dans "chaine"
        printf("ligne fichier 1 %s", chaine1); // On affiche la chaîne
        fgets(chaine2, TAILLE_MAX, fichier2); // On lit maximum TAILLE_MAX caractères du fichier, on stocke le tout dans "chaine"
        printf("ligne fichier 2 %s", chaine2); // On affiche la chaîne 
        if (chaine1 != chaine2)
        {
               printf("fichiers differents"); 
        }
    }
    fclose(fichier1);
    fclose(fichier2);

    return 0;
}
 
A

Anonymous

Invité
#12
Merci ToOns actuellement j'ai calculer les taille des fichiers, et j'ai restocker tous le contenu des fichiers dans 2 tableaux a double dimensions dynamiques donc je peut accéder a chaque caractère des fichiers par ces tableaux.

c'est de déterminer tous les cas que je n'arrive pas a faire
 
Inscrit
19 Octobre 2010
Messages
214
Reactions
0
#14
ToOnS a dit:
Code:
#define TAILLE_MAX 1000 // Tableau de taille 1000
 
int main(int argc, char *argv[])
{
    FILE* fichier1 = NULL;
    char chaine1[TAILLE_MAX] = ""; // Chaîne vide de taille TAILLE_MAX
 
    fichier1 = fopen("test1.txt", "r");

    FILE* fichier2 = NULL;
    char chaine2[TAILLE_MAX] = ""; // Chaîne vide de taille TAILLE_MAX
 
    fichier2 = fopen("test2.txt", "r");

 
    if ((fichier1 != NULL) && (fichier2 != NULL))
    {
        fgets(chaine1, TAILLE_MAX, fichier1); // On lit maximum TAILLE_MAX caractères du fichier, on stocke le tout dans "chaine"
        printf("ligne fichier 1 %s", chaine1); // On affiche la chaîne
        fgets(chaine2, TAILLE_MAX, fichier2); // On lit maximum TAILLE_MAX caractères du fichier, on stocke le tout dans "chaine"
        printf("ligne fichier 2 %s", chaine2); // On affiche la chaîne 
        [b]if (chaine1 != chaine2)[/b]
        {
               printf("fichiers differents"); 
        }
    }
    fclose(fichier1);
    fclose(fichier2);

    return 0;
}
Attention, la comparaison de chaines ne fonctionne pas ainsi en C / C++. En écrivant (chaine1 != chaine2) tu compares l'adresse des pointeurs, qui sont nécessairement différentes. Pour comparer le contenu des chaînes, il faut le faire explicitement (dans une boucle ou avec une fonction type _strcmp).
 
A

Anonymous

Invité
#15
Merci FastFrench.

En faite le projet est a rendre pour le 30 janvier et je vais poster le code que j'ai actuellement en C, celui-ci gère normalement les changements dans un fichier.
 
A

Anonymous

Invité
#17
Oui tous a fait, a l'ESGI en dev de jeux video
 
Haut Bas