Se connecter / S'enregistrer

Résolu La compilation marche mais ne donne pas le resultat attendu, help !

Solutions (8)
Tags :
  • chaine
  • string
  • Programmation
|
Bonjour à tous
J'ai commencé un projet de "livre dont vous êtes le héros" (Livre dont vous êtes le héros pour ceux qui ne connaissent pas). J'ai donc pris une histoire sur Internet qui était donc déjà "coupée" en paragraphes. Pour rendre ça intéressant, et m'exercer avec la manipulation des fichiers je cherche à découper le fichier.txt en 600 fichiers.txt (étant donné que l'histoire comporte 600 paragraphes), qui comporteraient chacun un paragraphe donc.
Voici le code :

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <regex.h>
  5. #define TAILLE 100
  6.  
  7. int main()
  8. {
  9. FILE *fichier = NULL, *ecrire = NULL;
  10. const char *str_regex = "[0-9]+\n"; regex_t preg;
  11. regcomp (&preg, str_regex, REG_NOSUB | REG_EXTENDED);
  12. char chaine[TAILLE] = "", chaineNom[TAILLE] = "";
  13. int compteurNom = 0;
  14.  
  15. fichier = fopen("histoire.txt", "r");
  16. if(fichier!= NULL)
  17. {
  18. do
  19. {
  20. compteurNom++;
  21. sprintf(chaineNom, "fichier%d.txt", compteurNom);
  22. ecrire = fopen(chaineNom, "w");
  23. if(ecrire!= NULL)
  24. {
  25. do
  26. {
  27. fgets(chaine, TAILLE, fichier);
  28. fputs(chaine, ecrire);
  29.  
  30. } while(regexec (&preg, chaine, 0, NULL, 0) != 0);
  31. fclose(ecrire);
  32. }
  33.  
  34. } while(fgets(chaine, TAILLE, fichier)!= NULL);
  35. fclose(fichier);
  36. }
  37.  
  38. return 0;



Pas de problème lors de la compilation mais... plus de 800 fichiers sont créés au lieu de 600, et ils sont tous vides, et je ne vois pas d'où vient le problème. Je vous remercie d'avance d'y jeter un coup d'oeil :)  Et je m'excuse d'avance si la mise en page (par rapport au code je veux dire), ne correspond pas à la mise en page standard que l'on utilise sur ce forum, je suis nouvelle et n'ai donc aucune idée de tout ça pour l'instant :lol: 
Contenus similaires
  • Autres pages sur : compilation marche donne resultat attendu help
Meilleure solution
partage
|
Voici le code un peu corrigé et commenté, à tester (je n'ai pas pu le faire moi même).
Bon courage,

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <regex.h>
  5. #define TAILLE 100
  6.  
  7. int main()
  8. {
  9. //Eviter l'appel de fonction(s) dans les déclarations de variables
  10. //Mettre sur chaque ligne un seul type de variable
  11. //Tout ça dans un but de meilleure lisibilité
  12. FILE *fichier = NULL, *ecrire = NULL;
  13. regex_t preg;
  14. const char *str_regex = "[0-9]+\n";
  15. char chaine[TAILLE] = "", chaineNom[TAILLE] = "";
  16. int compteurNom = 0;
  17. int* verifSaisie;
  18.  
  19. regcomp (&preg, str_regex, REG_NOSUB | REG_EXTENDED);
  20.  
  21. fichier = fopen("histoire.txt", "r" );
  22.  
  23. if(fichier!= NULL)
  24. {
  25. //On boucle tant qu'on est pas a la fin du fichier
  26. do
  27. {
  28. compteurNom++;
  29. sprintf(chaineNom, "fichier%d.txt", compteurNom);
  30. ecrire = fopen(chaineNom, "w" );
  31. if(ecrire!= NULL)
  32. {
  33. //ici, on tourne en boucle tant qu'on est pas tombés sur un numéro de paragraphe
  34. //on qu'on est a la fin du fichier
  35. do
  36. {
  37.  
  38. //Utiliser sizeof() plutot que TAILLE, le paramètre à passer étant le nombre d'octets de la chaine.
  39. verifSaisie = fgets(chaine, sizeof(chaine), fichier);
  40. if(verifSaisie!=NULL)
  41. fputs(chaine, ecrire);
  42.  
  43. } while( verifSaisie!=NULL && regexec(&preg, chaine, 0, NULL, 0)!=0 );
  44.  
  45. fclose(ecrire);
  46. }
  47.  
  48. } while(verifSaisie!= NULL);
  49.  
  50. fclose(fichier);
  51. }
  52.  
  53. return 0;
  54. }
  • Commenter cette solution |
Score
0
òh
òi
|
killive a dit :
Voici le code un peu corrigé et commenté, à tester (je n'ai pas pu le faire moi même).
Bon courage,

[...]



J'ai corrigé ça ; le découpage s'effectue, mais c'est encore n'importe comment et sans aucune logique :heink:  mais pas grave, je vais bien finir par trouver ce qui cloche :bounce:  Merci encore de ton aide !
  • Commenter cette réponse |
Score
0
òh
òi
|
Meilleure réponse sélectionnée par Alcooline.
  • Commenter cette réponse |
Score
0
òh
òi
|
des printf dans le code, qui permettent de suivre l'évolution de la valeur de tes variables par exemple, et de savoir ainsi où est-ce que ça ne va pas.
  • Commenter cette réponse |
Score
0
òh
òi
|
CRicky a dit :
Affiche des infos pour faire du debug.


Comment ça ?
  • Commenter cette réponse |
Score
0
òh
òi
|
Affiche des infos pour faire du debug.
  • Commenter cette réponse |
Score
0
òh
òi
|
Et utilise l'affichage de code pas une citation, pour que ce soit lisible. :) 
  • Commenter cette réponse |
Score
0
òh
òi
, Ex-AdMiN |
Peux tu éditer ton titre pour un plus explicite ? merci d'avance.
  • Commenter cette réponse |

Ce n'est pas ce que vous cherchiez ?

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS