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

rouliow 6 Messages postés lundi 8 novembre 2004Date d'inscription 17 juin 2005 Dernière intervention - 15 déc. 2004 à 01:42 - Dernière réponse : rouliow 6 Messages postés lundi 8 novembre 2004Date d'inscription 17 juin 2005 Dernière intervention
- 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 )
{


}
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
cs_6co 114 Messages postés lundi 27 janvier 2003Date d'inscription 5 avril 2012 Dernière intervention - 15 déc. 2004 à 10:13
3
Merci
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

Merci cs_6co 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de cs_6co
cs_6co 114 Messages postés lundi 27 janvier 2003Date d'inscription 5 avril 2012 Dernière intervention - 15 déc. 2004 à 02:12
0
Merci
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
Commenter la réponse de cs_6co
rouliow 6 Messages postés lundi 8 novembre 2004Date d'inscription 17 juin 2005 Dernière intervention - 15 déc. 2004 à 03:31
0
Merci
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>
Commenter la réponse de rouliow
bayeto 224 Messages postés mardi 12 août 2003Date d'inscription 18 octobre 2010 Dernière intervention - 15 déc. 2004 à 10:19
0
Merci
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
Commenter la réponse de bayeto
rouliow 6 Messages postés lundi 8 novembre 2004Date d'inscription 17 juin 2005 Dernière intervention - 15 déc. 2004 à 19:45
0
Merci
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 ;)
Commenter la réponse de rouliow

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.