Erreur! Création d'un nouveau fichier.
Salut!
Je suis en pleine création d'un petit programme. Je trouve un petit problème dans l'exécution. Ce dernier est destiné à indexer des fichiers, et de sauvegarder les différents mots et son nombre d'occurence dans un fichier spécifique index.txt. Aucune erreur au niveau de la compilation ni au niveau de l'exécution mais plutôt lors de la création du nouveau fichier, ce fait ne veux pas marcher d'où son affichage sur console na marche pas. Je sais ps pourquoi.
S'il vous plaît, j'ai besoin d'une aide. :?
Code:
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 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
| #include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
typedef struct link link;
struct link
{
char nom[30];
int nbOccur; // nombre d'incrémentation de la chaîne
link *suivant;
};
link* trouve(char CH[30], link *tete)
{
link *ptr = tete;
while(ptr != NULL && !strcmp(ptr->nom, CH))
ptr=ptr->suivant;
return ptr;
}
link* insertQueue(char CH[30], link *tete)
{
link *newLink = NULL;
link *ptr = tete;
if (ptr!= NULL)
while(ptr->suivant != NULL )
ptr=ptr->suivant;
newLink=(link*)malloc(sizeof(link));
newLink->suivant = NULL;
strcpy(newLink->nom, CH);
newLink->nbOccur = 1;
if (ptr!= NULL)
{
ptr->suivant = newLink;
return tete;
}
else
return newLink;
}
void createNewFile(link *tete)
{
FILE *fichier = NULL;
link *ptr = tete;
fichier = fopen("index.txt", "w+");
if(fichier != NULL)
{
while(ptr != NULL)
{
fprintf(fichier, "%s\t\t%d\n", ptr->nom, ptr->nbOccur);
ptr = ptr->suivant;
}
fclose(fichier);
}
}
void affichNewFile()
{
FILE *fichier = NULL;
int caractereActuel = 0;
fichier = fopen("index.txt", "r");
if(fichier != NULL)
{
do
{
caractereActuel = getc(fichier);
printf("%c", caractereActuel);
}
while(caractereActuel != EOF);
}
}
int main(int argc, char *argv[])
{
link *tete = NULL; // Tête de liste
link *mot = tete; // parcours de la liste de chaînes
FILE *fichier = NULL; // Pointeur sur fichier à traîter
int caractereActuel = 0; // Caractère en cours de traitement
char chaineEnCours[30] = "\0"; // Chaîne en cours de formation
char carac[2] = " " ; // Sert pour la convertion d'un caractère en chaîne
char path[50]; // Path du fichier à traîter
printf("Chemin du fichier a traiter : ");
gets(path);
fichier = fopen(path, "r");
if (fichier != NULL)
{
// Boucle de lecture des caractères un à un
do
{
caractereActuel = fgetc(fichier);
if(isspace(caractereActuel) || caractereActuel=='.' || caractereActuel==',' || caractereActuel==';' || caractereActuel=='?' || caractereActuel=='!' || caractereActuel==':' || strcmp(chaineEnCours, "\0"))
{
mot = trouve(chaineEnCours, tete);
if(mot != NULL)
{
mot->nbOccur = mot->nbOccur + 1;
mot = NULL;
}
else
tete = insertQueue(chaineEnCours, tete);
strcpy(chaineEnCours, "\0");
}
else
{
carac[0] = (char)caractereActuel;
carac[1] = '\0';
strcat(chaineEnCours, carac);
}
} while (caractereActuel != EOF); // On continue tant que fgetc n'a pas retourné EOF (fin de fichier)
fclose(fichier);
}
else
printf("Impossible d'ouvrir le fichier %s!", path);
createNewFile(tete);
affichNewFile();
free(mot);
free(tete);
return 0;
} |
D'avance, merci beaucoup!