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

C Discussion :

fichiers binaires et fichiers text


Sujet :

C

  1. #21
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 13
    Points : 0
    Points
    0
    Par défaut
    le code ne marche pas

  2. #22
    Invité
    Invité(e)
    Par défaut
    Mais encore ?

    Merci d'éviter ce genre d'expression seule qui ne mène à rien, surtout pas à connaître le vrai comportement et pouvoir de ce fait t'aider efficacement.

  3. #23
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 13
    Points : 0
    Points
    0
    Par défaut
    j'ai résolu mon problème,merci pour vos interventions,maintennat je veux savoir si il ya une possibilité de trier un ensembles de mots dans un fichier binaire

  4. #24
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 195
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 195
    Points : 17 162
    Points
    17 162
    Par défaut
    Bonjour à tous.
    Quand on résoud son problème, on est prié de dire comment.

    Définit un tableau/une liste doublement chainé, et applique dessus un algorithme de tri.
    Demande à notre-ami-à-tous ce qu'il pense de quicksort.

    Par ailleurs, notre réglement nous interdit de faire les exercices des étudiants, donc, dis nous ce qui te bloque, code à l'appui, pour que nous puissions te débloquer.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  5. #25
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 13
    Points : 0
    Points
    0
    Par défaut
    parce que j'ai crée un code pour trier un fichier,avec les liste chaîné mais ne fonctionne pas quand je veux trier un fichier binaire,par ce que j'ai fait un test comme suit :
    j'ai choisit un fichier binaire pour le trier et j'ai choisit de mettre le résulta dans un fichier texte pour que je peux savoir si le programme a fait le travail demandé, et j'ai trouvé que le texte n'est pas trier correctement .
    mais quand je choisit la source comme fichier texte et la destination un fichier texte Le résultat est bon.
    voila le code:

    Code c : 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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    #include<stdio.h> 
    #include<stdlib.h> 
    #include<conio.h> 
    #include<string.h> 
    typedef struct liste liste;//definition de la liste 
    struct liste 
    { 
    char ch[100]; 
    liste *next; 
    }; 
    liste* ajout(liste **l,char *t)/*permet l'ajout d'une mot a la liste (ajout en tete)*/ 
    { 
    liste *p; 
    p=(liste *) malloc(sizeof(liste)); 
    strcpy(p->ch,t); 
    p->next=*l; 
    *l=p; 
    } 
    liste* charger(liste **l)/*permet de charger les mots de la fichier dans une liste*/ 
    { 
    FILE *fp; 
    char t[100],s[100]; 
    puts("dooner le nom de fichier source(a trier)"); 
    retour: 
    gets(s); 
    fp=fopen(s,"rb"); 
    if(!fp) 
    { 
    puts("\ncette fichier n'existe pas"); 
    puts("si vous desirer resseayer tappuiez sur entrer sinon autre caractere puis entrer"); 
    if(getchar()=='\n') 
    { 
    puts("donner le nom de fichier source(a trier)"); 
    goto retour; 
    } 
    else exit(0); 
    } 
    while(fgets(t,100,fp)) 
    ajout(l,t); 
    } 
    void liberer(liste *l)// liberer la liste 
    { 
    liste *p,*t; 
    for(p=l;p;) 
    { 
    t=p->next; 
    free(p); 
    p=t; 
    } 
    } 
    FILE* remplir(char *s,liste *l)/*permet de remplir le fichier destination*/ 
    { 
    FILE *fp; 
    liste *p=l; 
    fp=fopen(s,"wb"); 
    while(l) 
    { 
    fputs(l->ch,fp); 
    l=l->next; 
    } 
    fclose(fp); 
    liberer(p); 
    } 
    liste* trier(liste **l)// trier une liste 
    { 
    liste *p; 
    char s[100]; 
    if(*l) 
    { 
    for(p=(*l)->next;p;p=p->next) 
    if(strcmp((*l)->ch,p->ch)>0) 
    { 
    strcpy(s,(*l)->ch); 
    strcpy((*l)->ch,p->ch); 
    strcpy(p->ch,s); 
    } 
    trier(&((*l)->next)); 
    } 
    } 
    main() 
    { 
    char s[100]; 
    liste *l=NULL; 
    charger(&l); 
    trier(&l); 
    puts("dooner le nom de fichier destination (triee)"); 
    gets(s); 
    remplir(s,l); 
    puts("merci, consulter votre dossier vous trouverez votre fichier"); 
    getch(); 
    }

  6. #26
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 195
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 195
    Points : 17 162
    Points
    17 162
    Par défaut
    Bonjour,

    Pourquoi as tu un goto en arriere?
    Pourquoi utilises-tu gets()?
    Les signatures valides de main sont: int main(); ou int main(int argc, char** argv);.

    remplir() est fausse, elle retourne un FILE* sans instruction return.
    Même problème pour charger, ajout et trier.

    Dans trier(), il manque une paire d'accolades pour le for. C'est a priori une question d'explicitation.

    Le typedef d'une structure s'écrirait plutot typedef struct s{} s;Enfin, toutes tes variables on des noms non informatifs.
    Par exemple char* s est chouette, on sait que s est une string, sauf que char* filename est beaucoup plus clair quant à son usage.

    Par ailleurs, quand tu postes un code, assure-toi d'avoir une indentation correcte.

    Tant que tu n'auras pas résolu tout cela, ton programme sera nécessairement faux… pour nous.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  7. #27
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 195
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 195
    Points : 17 162
    Points
    17 162
    Par défaut
    C'est encore moi…
    supprime conio.h, vu que tu ne l'utilises pas, ainsi, ton code pourra compiler avec linux (comme c'est mon cas).

    Je te suggère aussi d'utiliser une structure de liste triée:
    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
    typedef char value_type[LIST_NAME_SIZE];
    typedef const char const_value_type[LIST_NAME_SIZE];
     
    //definition de la liste
    typedef struct chainon {
    	value_type contenu;
    	struct chainon *suivant;
    } chainon;
     
    chainon * const liste_vide = NULL;
     
    typedef int compare_f(const_value_type, const_value_type);
     
    typedef struct liste_triee {
    	chainon* tete;
    	compare_f* compare;
    } liste_triee;
     
    liste_triee nouvelle_liste_triee(compare_f* comparateur) {
    	liste_triee liste = {liste_vide, comparateur};
    	return liste;
    }
    il ne te restera alors qu'a implémenter void ajouter(liste_triee *liste, value_type valeur); pour ajouter au bon endroit dans la liste, et tout sera atrocement simple.
    voici une idée du main que tu peux obtenir avec une telle structure:

    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
    int main(int argc, char** argv) {
    	if (argc!=3) {
    		printf("trie un fichier de données\n");
    		printf("usage: %s <source> <dest>\n", argv[0]);
    		return 2;
    	}
    	int status;
    	liste_triee liste = charger(argv[1]);
    	if (est_vide(liste)) {
    		fprintf(stderr, "fichier source manquant ou vide.\n");
    		return 1;
    	}
    	status = ecrire(liste, argv[2]);
    	liberer_liste_triee(liste);
    	return status;
    }
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

Discussions similaires

  1. Réponses: 17
    Dernier message: 31/03/2009, 15h52
  2. Réponses: 15
    Dernier message: 28/11/2008, 17h57
  3. fichier binaire vers fichier ascii.
    Par vbk!!! dans le forum Général Python
    Réponses: 3
    Dernier message: 24/09/2008, 12h17
  4. Réponses: 6
    Dernier message: 14/03/2007, 14h36
  5. fichier binaire ou texte
    Par soussou dans le forum C++Builder
    Réponses: 4
    Dernier message: 14/06/2002, 13h39

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