Lecture de caractere speciaux a partir d'un fichier [language c]

Résolu
rouliow Messages postés 6 Date d'inscription lundi 8 novembre 2004 Statut Membre Dernière intervention 17 juin 2005 - 15 déc. 2004 à 01:42
rouliow Messages postés 6 Date d'inscription lundi 8 novembre 2004 Statut Membre Dernière intervention 17 juin 2005 - 15 déc. 2004 à 19:45
Bonjour,
j'ai un problème en language C.
J'aimerai crée une fonction qui ouvre un fichier .txt et qui sauvgarde chacun des caracteres du fichier dans une liste chainée.
Ma fonction marche. Le seul probleme que je rencontre c'est lorsque j'ai des caracteres speciaux tels que les caracteres accentués dans mon fichier texte. La fonction fgets, me renvoit une valeur négative pour le code ascii de ces caracteres.
(ex é->-23 au lieu de 130, è->-24 au lieu de 138)
J'aimerai gérer cette éventualité, et enregistré ces caractères.
Il doit y avoir une autre methode que la conversion cas par cas.
Comment pourrai-je faire ?
Si vous avez des solutions a me proposer je suis preneur, merci d'avances ;)

J'ai mit juste le debut de mon code


FILE *fp=NULL; // Variable pour ouvrir le fichier
int etat=-1; //varible de retour,indique l'échec ou le succè de la fonction
char ligne_fichier [nb_char];

//nomFichier, indique le non du fichier .txt

fp = fopen(nomFichier,"r");

if(fp!=NULL)
{
etat=0;

while( fgets( ligne_fichier, sizeof(ligne_fichier), fp)!=NULL )
{


}

5 réponses

cs_6co Messages postés 114 Date d'inscription lundi 27 janvier 2003 Statut Membre Dernière intervention 5 avril 2012 1
15 déc. 2004 à 10:13
il est vrai que j'avais oublié ce détail...

de même si tu fais :
printf("oublié");
tu obtiens à l'affichage un truc comme "oubliù"

les caractères ne sont pas les mêmes sous windows que sous la console...
alors, soit tu fais une conversion soit tu laisses tomber, sachant que ta conversion ne sera vraiment utile que si tu édites ton texte en console et que tu veux l'ouvrir sous windows ou inversement.
quand j'étais en cours, un exercice était de convertir des fichiers txt provenant de ms-dos pour pouvoir les lire convenablement sous windows avec le notepad. le prof avait donné la liste des caractères à changer mais désolé, impossible de remettre la main dessus...

6co
3
cs_6co Messages postés 114 Date d'inscription lundi 27 janvier 2003 Statut Membre Dernière intervention 5 avril 2012 1
15 déc. 2004 à 02:12
qu'y a-t-il de vraiment étrange dans le faite ou fgets te renvoie un char qui n'est pas 130...
rappel : -128<valeur d'un char<127

il va falloir traiter tes chaînes en tant qu'unsigned char...

6co
0
rouliow Messages postés 6 Date d'inscription lundi 8 novembre 2004 Statut Membre Dernière intervention 17 juin 2005
15 déc. 2004 à 03:31
Cool,j e poste et j'ai une réponse en quelques minutes.
Merci à toi;)
Avec ce que j'avais écrit c'est normale que ça ne puisse pas marché, cependant j'ai toujours des erreures.

Si j'ouvre un fichier .txt contenant un caractere ascentué comme premier caractere, fgetc() ou fgets(), me renvoit pas le bon code ascii corespondant à ces caracteres et par conséquent cela ne stoque par le bon char.Par exemple il me renvoie 233 pour le caractere é.
Je comprend pas d'ou peut provenir l'erreur, je dois vraiment être un gros boulet, à moin que se soit la fatigue...
Bon, je vais me coucher moi.
Merci à tous d'éclairer ma lenterne.

1er cas.

#include <stdio.h>
#include <stdlib.h>

FILE *fp=NULL;
int mot [nb_char];
int etat=-1;

fp = fopen(nomFichier,"r"); 

if(fp!=NULL)
{  
    etat=0;

    while ((mot[0] = fgetc(fp)) != EOF) 
    {
        printf ("%ld\n",mot[0]);
        printf ("%c\n",mot[0]);
        system("pause");  
    }
}
/////AFFICHE
//233
//ù


2ème cas

</td></tr></table>
#include <stdio.h>
#include <stdlib.h>

FILE *fp=NULL;
unsigned char ligne_fichier[nb_char];
int etat=-1;

fp = fopen(nomFichier,"r");

if(fp!=NULL)
{

while( fgets( ligne_fichier, sizeof(ligne_fichier), fp)!=NULL )
{
printf ("%ld\n",ligne_fichier[0]);
printf ("%c\n",ligne_fichier[0]);
system("pause");
}
}
/////AFFICHE
//233
//ù
</td></tr></table>
0
bayeto Messages postés 224 Date d'inscription mardi 12 août 2003 Statut Membre Dernière intervention 18 octobre 2010
15 déc. 2004 à 10:19
Y a t'il un rapport avec les codages ANSI (Windows) et ASCII (dos ou Windows console) ?

Ton fichier texte est il ecrit sous dos (via edit) ou Windows (via notepad) ?

Jette voir un oeil ici
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
rouliow Messages postés 6 Date d'inscription lundi 8 novembre 2004 Statut Membre Dernière intervention 17 juin 2005
15 déc. 2004 à 19:45
Le but de ma fonction serra de gérer l'ouverture d'un fichier .txt.
Je dois en réalité crée un éditeur de texte en mode pleine page, du meme genre que notepad, donc l'insertion de ces caracteres me parait indispensable. Mon fichier était écrit via notepad.

Je savais pas que les fichiers .txt provenant de ms-dos etaient différent de windows. Donc ça répond à ma question, si je me sert de mon éditeur pour lire et modifier des fichiers .txt écri sous dos alors je n'ai plus de soucie. Si je veux les rendre compatible windows, il me suffit de crée une fonction de conversion.

Mille merci ;)
0
Rejoignez-nous