Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3135 connectés 

  FORUM HardWare.fr
  Programmation
  C

  comment lire les caractères accentués dans un fichier texte ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

comment lire les caractères accentués dans un fichier texte ?

n°1356898
Flitz
Posté le 30-04-2006 à 21:36:09  profilanswer
 

Bonjour,
 
je suis en train d'essayer de lire un fichier caractère par caractère mais ce fichier contient des caractères normaux mais aussi des accentués. Je ne parviens pas à obtenir qqch de correcte. Lorsque les caractères sont des normaux, pas de problème mais lorsqu'ils sont accentués ça patauge :(.
 
Est-ce que qqun saurait m'aider ?
 
Supposons le fichier déjà ouvert par fopen en lecture (texte). Pour récupérer un caractère j'utilise fread. L'ennui c'est que je ne maîtrise pas du tout ça et j'ai quelques soucis car ensuite je dois convertir ce caractère en char* (car une fonction de recherche dans une table de hachage utilise un argument char* et non char). J'ai essayé comme suit :
 

Code :
  1. char c;                                              //Caractere lu dans le fichier.  
  2. fread(&c, sizeof(unsigned char), 1, input);   //Lecture d'un caractere  
  3. fct = g_hash_table_lookup(lexical_hash, (char *)c); //Recherche dans la table.


 
J'utilise un unsigned char pour avoir la taille du code ASCII étendu. Si je fais un printf pour voir le résultat bon ça n'affiche rien car c'est accentué et c'est pas supporté. Le problème que j'ai c'est alors de passer le "char c" vers un "char *" sans avoir d'ennui. Ca je ne parviens pas à le faire.
 
Je suis donc venu vous demander comment est-ce que vous vous feriez pour lire un fichier texte caractère par caractère sachant que certains sont des accentués (aigu, grave, tréma, circonflexe et ce que sur les minuscule et d'autres des majuscules) et qu'ensuite le caractère lu doit passer dans une fonction de recherche qui demande un (char *).  
 
J'ai essayé de jouer avec des char * c dès le début mais j'ai tjrs eu des segfault dans fread (je maitrise pas) quelque soit l'argument que je lui passe (c, &c, *c; ...).
 
Sauriez-vous m'aider ?
 
Merci d'avance
 
 :hello:

mood
Publicité
Posté le 30-04-2006 à 21:36:09  profilanswer
 

n°1356907
Taz
bisounours-codeur
Posté le 30-04-2006 à 22:21:34  profilanswer
 

1) il se passe quoi si le caractère est multioctet ?
2) (char*)c ça fait n'importe quoi

n°1356908
Emmanuel D​elahaye
C is a sharp tool
Posté le 30-04-2006 à 22:24:14  profilanswer
 

Flitz a écrit :

je suis en train d'essayer de lire un fichier caractère par caractère mais ce fichier contient des caractères normaux mais aussi des accentués.  


Pour lire un fichier texte byte par byte, c'est  

Code :
  1. int c;
  2.    while ((c = fgetc(fp)) != EOF)
  3.    {
  4.       /* traitement */
  5.    }


Message édité par Emmanuel Delahaye le 30-04-2006 à 22:39:03

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1356911
Taz
bisounours-codeur
Posté le 30-04-2006 à 22:33:20  profilanswer
 

char par char

n°1356920
Trap D
Posté le 30-04-2006 à 23:13:03  profilanswer
 

Aïe aïe aïe, que personne ne dise octet par octet !!! :lol:


Message édité par Trap D le 30-04-2006 à 23:15:43
n°1357011
Flitz
Posté le 01-05-2006 à 12:01:58  profilanswer
 

merci de vos réponses  :jap:  
 
mais en fait j'ai tjrs du mal. Est-il possible qu'un caractère spécial tel "ä" "â" etc soient considérés comme 2 caractères (ou sur 2 octets) ?
 
De plus, avec fgetc qui renvoie un entier, comment je fais pour le transformer en char * après ? (car g_hash_table_lookup prend un char *)

n°1357074
Taz
bisounours-codeur
Posté le 01-05-2006 à 13:06:24  profilanswer
 

oui, ça dépend de ton codage de caractère. si c'est de l'utf-8 par exemple, c'est exactement ce qui se passe.

n°1357075
Taz
bisounours-codeur
Posté le 01-05-2006 à 13:07:39  profilanswer
 

http://developer.gnome.org/doc/API [...] -next-char
 
 
avec ce genre de chose, tu peux itérer caractère logique par caractère logique (et non char par char ce qui n'a aucun sens)

n°1357365
Flitz
Posté le 01-05-2006 à 20:27:44  profilanswer
 

Taz a écrit :

http://developer.gnome.org/doc/API [...] -next-char
 
 
avec ce genre de chose, tu peux itérer caractère logique par caractère logique (et non char par char ce qui n'a aucun sens)


 
Merci beaucoup de ton aide et de ton lien, je ne savais pas que ce genre de chose existait. Je vais aller voir ça  
 
bonne soirée  
 :jap:

n°1357881
breizhbugs
Posté le 02-05-2006 à 15:45:54  profilanswer
 

Si sous windows,
voir les fonctions CharToOem et OemToChar, avant l'affichage en console.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  comment lire les caractères accentués dans un fichier texte ?

 

Sujets relatifs
imprimer un fichierSigne "+" dans une variable de texte dynamique
Accès à un fichier sur réseauParser un fichier csv
compteur dans fichier phpListe chainée dans un fichier
[VBA Excel] Récupérer le nom de fichier après Save[Excel] Remplacer un texte dans une cellule exel
[C#] Créer un fichier ExcelLancer un fichier
Plus de sujets relatifs à : comment lire les caractères accentués dans un fichier texte ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR