Lecture/Ecriture fichier (problème codage ?)
cb
-
cb -
cb -
Bonjour,
Mon programme ouvre un fichier texte où il y a des mots stockés dans une colonne (\n entre chaque mot). Le but est de tout mettre en minuscule.
Les mots sont tous de même longueur. Lors de l'exécution du programme, celui-ci fais une sorte de boucle infinie... (je pense que l'erreur se situe au niveau du nombre de caractères/curseur)
Ces fichiers textes ont été créés avec windows et mon programme tourne sous linux (sachant que le codage des retours chariot est différent, taille 2 pour windows et taille 1 pour linux, je suis quasi sûr que mon problème viendrait de là ? Comme le résoudre ? Si je copie le contenu du fichier dans un autre fichier créé sous linux, ça tourne nickel car ça converti le codage en route... Mais c'est lourd !!!! )
Si quelqu'un a le temps d'y jeter un coup d'oeil rapide...
Merci d'avance
Mon programme ouvre un fichier texte où il y a des mots stockés dans une colonne (\n entre chaque mot). Le but est de tout mettre en minuscule.
Les mots sont tous de même longueur. Lors de l'exécution du programme, celui-ci fais une sorte de boucle infinie... (je pense que l'erreur se situe au niveau du nombre de caractères/curseur)
Ces fichiers textes ont été créés avec windows et mon programme tourne sous linux (sachant que le codage des retours chariot est différent, taille 2 pour windows et taille 1 pour linux, je suis quasi sûr que mon problème viendrait de là ? Comme le résoudre ? Si je copie le contenu du fichier dans un autre fichier créé sous linux, ça tourne nickel car ça converti le codage en route... Mais c'est lourd !!!! )
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NbLettre 5;
int main(int argc, char *argv[])
{
int i;
char NomFichier[]="truc.txt",chaine[27];
FILE* fichier = NULL;
fichier = fopen(NomFichier, "r+");
if (fichier == NULL)
{
printf("Erreur ouverture\n");
return 0;
}
while (fgets(chaine, NbLettre + 1, fichier) != NULL)
{
printf("Avant : %s - ",chaine);
for (i= 0; chaine[i] != '\0'; i++)
if (chaine[i] >= 'A' && chaine[i] <= 'Z') // Conversion
chaine[i]= chaine[i] - 'A' + 'a';
printf("après : %s\n",chaine);;
fseek(fichier, - NbLettre, SEEK_CUR); // On se place au début de la ligne en question
fprintf(fichier, "%s\n", chaine); // Ecriture de la chaine en minuscules
}
fclose(fichier);
return EXIT_SUCCESS;
}
Si quelqu'un a le temps d'y jeter un coup d'oeil rapide...
Merci d'avance
A voir également:
- Lecture/Ecriture fichier (problème codage ?)
- Codage ascii - Guide
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
1 réponse
Salut,
J'ai trouvé ce lien sur CCM qui pourrait peut être t'aider si c'est bien le problème que tu penses :
Sed - Conversion retours chariots DOS (CRLF) / UNIX (LF).
Si ca t'avance pas, peut tu me dire quel est le comportement de ton prog avec les fichier txt windows : refus de complilé, le prog plante a l'execution, la conversion n'est pas entiere (reste des majuscules), ou autres...
A+
J'ai trouvé ce lien sur CCM qui pourrait peut être t'aider si c'est bien le problème que tu penses :
Sed - Conversion retours chariots DOS (CRLF) / UNIX (LF).
Si ca t'avance pas, peut tu me dire quel est le comportement de ton prog avec les fichier txt windows : refus de complilé, le prog plante a l'execution, la conversion n'est pas entiere (reste des majuscules), ou autres...
A+
Je vais tester avec la conversion et je dis quoi...
PS : Le truc étrange c'est que lorsque je copie/colle le contenu du fichier dans un autre fichier, ça tourne et ça fait ce que je veux !!!!