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 :

ecriture dans un fichier texte


Sujet :

C

  1. #1
    Membre éclairé Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Par défaut ecriture dans un fichier texte
    Bonjour à tous,
    je possede une table de hachage que j'ai rempli avec des mots du texte.
    J'aime bien mettre le contenu de la table de hachage dans un fichier texte, mais le fichier ne se produit pas
    des idées svp pour souci
    Merci
    voila les fonctions :
    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
    int EnregistrerDoubleTableFichTexte(TableHachageMot const DblTableHash[], char const *langue)
    {
    	int retour = -1;
    	char nomFich[FILENAME_MAX];
    	FILE *pfOut;
     
     
    		if(snprintf(nomFich, ARRAYSIZE(nomFich), ".\\%s_Table%d.txt", langue, 1) >= ARRAYSIZE(nomFich))
     
    	{
     
    		errno = E2BIG;
    		return -1;
     
    	}
     
    	pfOut = fopen(nomFich, "w");
    	if(pfOut != NULL)
    	{
     
    		dump_double_table(pfOut, DblTableHash);
     
    		retour = 0;
    		fclose(pfOut);
    	}
    	return retour;
    }
    la fonction dump-double_table:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void dump_double_table(FILE* pfOut, TableHachageMot const DblTableHash[])
    {
    	size_t boucle;
    	for ( boucle = 0; boucle != TAILLEHASH; boucle++)
    	{
     
     
    				fprintf(pfOut, "prefixhash=%d\n", boucle);
     
    			dump_table(pfOut, DblTableHash[boucle]);
     
    	}
    	fputc('\n', pfOut);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void dump_table(FILE* pfOut, ListeMot const TableHash[])
    {
    	size_t boucle;
    	for ( boucle = 0; boucle != TAILLEHASH; boucle++)
    	{
    		if (!ListeEstVide(&TableHash[boucle]))
    		{
     
    			AfficherListe(pfOut, &TableHash[boucle]);
    		}
    	}
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void AfficherListe(FILE *pfOut, ListeMot const *L)
    {
    	/*assert(L!=NULL);*/
    	ChainonMot const *pc;
    	for (pc = GetPremierC(L) ; pc!=NULL ; pc=GetNextC(pc))
    	{
     
    			fprintf(pfOut, "\t(\"%s\", %d lignes", GetMot(pc), GetNbLignes(pc));
     
     
    			fprintf(pfOut, ")\n");
    }
     
    }

  2. #2
    Membre éclairé Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Par défaut
    Bonjour,
    j'ai un petit souci concernant l'ecriture dans un fichier texte.
    Je vois pourquoi il m'affiche le resultat sous cette forme là?
    pourquoi tous ces espaces entre les lignes?
    merci

    plus de 150 lignes vides puis :
    tout les 5)tout le 5)
    28 lignes vides puis
    les amis 5)
    19 lignes vides puis
    du monde 5)
    plus de 100 lignes vide puis
    bonjour le 5)bonjour tout 10)
    etc

  3. #3
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 084
    Par défaut
    Cyrine, verifie cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for (pc = GetPremierC(L) ; pc!=NULL ; pc=GetNextC(pc))
    D'ailleurs, au passage, on utilise pas de for pour un nombre non connu d'iterations, on preferera le while (en theorie).

    A mon avis, tout les pc n'ont pas de ligne a afficher, ce qui fait que tu as plein de retour a la ligne alors que tu as peu de phrase.

  4. #4
    Membre éclairé Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Par défaut
    Citation Envoyé par SofEvans Voir le message
    Cyrine, verifie cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for (pc = GetPremierC(L) ; pc!=NULL ; pc=GetNextC(pc))
    D'ailleurs, au passage, on utilise pas de for pour un nombre non connu d'iterations, on preferera le while (en theorie).

    A mon avis, tout les pc n'ont pas de ligne a afficher, ce qui fait que tu as plein de retour a la ligne alors que tu as peu de phrase.

    Merci SOftEvans

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par SofEvans Voir le message
    Cyrine, verifie cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for (pc = GetPremierC(L) ; pc!=NULL ; pc=GetNextC(pc))
    D'ailleurs, au passage, on utilise pas de for pour un nombre non connu d'iterations, on preferera le while (en theorie).

    A mon avis, tout les pc n'ont pas de ligne a afficher, ce qui fait que tu as plein de retour a la ligne alors que tu as peu de phrase.
    Oui je pense que tu as raison, mais de toutes façons une écriture plus correcte serait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for (pc = GetPremierC(L) ; pc!=NULL ; pc=GetNextC(pc))
       {
           if ( GetMot(pc) != NULL && strlen(GetMot(pc)) > 0)
             {
                 fprintf(pfOut, "\t(\"%s\", %d lignes\n", GetMot(pc), GetNbLignes(pc));
             }
       }
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    pc = GetPremierC(L) ; 
    while (pc!=NULL)
      {
           if ( GetMot(pc) != NULL && strlen(GetMot(pc)) > 0)
              {
                 fprintf(pfOut, "\t(\"%s\", %d lignes\n", GetMot(pc), GetNbLignes(pc));
              }
     
            pc=GetNextC(pc) ;
    }

  6. #6
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 084
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    Oui je pense que tu as raison, mais de toutes façons une écriture plus correcte serait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for (pc = GetPremierC(L) ; pc!=NULL ; pc=GetNextC(pc))
       {
           if ( GetMot(pc) != NULL && strlen(GetMot(pc)) > 0)
             {
                 fprintf(pfOut, "\t(\"%s\", %d lignes\n", GetMot(pc), GetNbLignes(pc));
             }
       }
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    pc = GetPremierC(L) ; 
    while (pc!=NULL)
      {
           if ( GetMot(pc) != NULL && strlen(GetMot(pc)) > 0)
              {
                 fprintf(pfOut, "\t(\"%s\", %d lignes\n", GetMot(pc), GetNbLignes(pc));
              }
     
            pc=GetNextC(pc) ;
    }
    Les deux ecriture se valent effectivement. Mais semantiquement, c'est la deuxieme qu'il faut adopter. J'ai pas tout suivi par contre mais je croyais que chaque pc avait un mot à afficher. Si tel est le cas, tu as un probleme autre part cyrine. Sinon, les codes proposé par souviron sont parfait.

  7. #7
    Membre éclairé Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Par défaut
    D'accord , merci à vous tous

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par SofEvans Voir le message
    Les deux ecriture se valent effectivement. Mais semantiquement, c'est la deuxieme qu'il faut adopter.
    Dans ce cas précis, pas forcément, l'incrément étant clair...

    Citation Envoyé par SofEvans Voir le message
    J'ai pas tout suivi par contre mais je croyais que chaque pc avait un mot à afficher. Si tel est le cas, tu as un probleme autre part cyrine. Sinon, les codes proposé par souviron sont parfait.
    Disons que mon if tient compte d'erreurs dans la liste..

    Et qu'il doit effectivement y en avoir

  9. #9
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    C'est moi qui ait pondu ce code au début, et je trouve que la première écriture est beaucoup plus claire et lisible que la seconde.

    Quant aux chaînons, à moins qu'il se soit passé un truc bizarre, je ne vois pas trop comment des mots vides sont supposés pouvoir y entrer (les mots nuls sont tout simplement impossibles, le chaînon étant une structure avec un tableau de longueur variable)...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Membre éclairé Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    C'est moi qui ait pondu ce code au début, et je trouve que la première écriture est beaucoup plus claire et lisible que la seconde.

    Quant aux chaînons, à moins qu'il se soit passé un truc bizarre, je ne vois pas trop comment des mots vides sont supposés pouvoir y entrer (les mots nuls sont tout simplement impossibles, le chaînon étant une structure avec un tableau de longueur variable)...
    MErci MEdinoc,
    je regarde le code, peut etre j'ai modifié un truc qu'il faut pas le touché

Discussions similaires

  1. [Tableaux] ecriture dans un fichier texte
    Par TiNoUcHe dans le forum Langage
    Réponses: 4
    Dernier message: 27/09/2006, 16h12
  2. probleme d'ecriture dans un fichier texte
    Par Mickey.jet dans le forum Delphi
    Réponses: 3
    Dernier message: 21/06/2006, 17h51
  3. Ecriture dans un fichier texte
    Par Bmagic dans le forum MFC
    Réponses: 9
    Dernier message: 07/06/2006, 14h40
  4. ecriture dans un fichier text
    Par lerouzes dans le forum Langage
    Réponses: 19
    Dernier message: 30/04/2006, 16h29
  5. probleme d'ecriture dans un fichier texte
    Par azrael88370 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 24/01/2005, 17h33

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