IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

lecture fichier, caractères cyrilliques, caractères latins


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 45
    Par défaut lecture fichier, caractères cyrilliques, caractères latins
    Bonjour,

    Je n'arrive à rien, je ne m'en sors pas.
    Je veux lire un fichier de données littérales, et faire un traitement sur le premier mot de chaque ligne balisé par des caractères spéciaux.

    Voici deux lignes de mon fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    =◄абз:а:ц►, -а, тв. -ем, р. мн. -ев║
    =◄абрик:о:с►, -а, р. мн. -ов║
    Voici mon programme (j'ai tellement merdé, que j'ai presque tout effacé, et gardé le minimum: la lecture de la 1e ligne seulement):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(int argc, char *argv[])
    {
      #define TEMP_FILE "test.txt"
      int i;
      lecture(TEMP_FILE);
      system("PAUSE");
      return 0;
    }
     
     
    int lecture (char const * const s_filename)
    {
       FILE * p_file_src    = NULL;
       char * s_line        = NULL;
     
       if (!s_filename) return 0;
       /* ----- Ouverture fichier ----- */
       p_file_src = fopen (s_filename, "r");
       if (!p_file_src) return 0;
       /* ----- Allocation d'un tableau pour contenir la 1e ligne ----- */
       printf("%d\n", BUFSIZ);
       s_line = malloc (BUFSIZ);
       if (!s_line)
       {
          fclose (p_file_src);
          return 0;
       }
       /* ----- Lecture 1e ligne du fichier ----- */
       fgets (s_line, BUFSIZ, p_file_src);
       /* ----- affichage de cette ligne, plus tard, traitement ----- */
       printf(">>>%s<<<\n", s_line);
       /* ----- Fermeture du fichier ----- */
       /* Fermeture du fichier. */
       fclose (p_file_src);
       /* Liberation de la memoire. */
       free (s_line);
       s_line = NULL;
       return 1;
    }
    Le résultat:
    Et là, j'ai plus avancé...

    J'ai eu l'idée de changer mon fichier de données en:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    =<cheval>, -aux║
    =<chou>, -x║
    Et ça donne la même chose! J'ai conclu que ce n'était pas les caractères cyrilliques qui posaient problème, et j'ai résolu de demander de l'aide...

    L'idéal, pour moi, c'est de sortir pour chaque ligne lue, trois variables:
    - var_entree, chaîne de caractères contenant tous les caractères entre '=' et '║'
    - var_mot, chaîne de caractères contenant tous les caractères entre '<' et '>'
    - var_flexion, chaîne de caractères commençant par le 1er '-' après '>, ' et allant jusqu'à '║'

    Je ferai mon traitement et je copierai var_mot_traitee et var_flexion_traitee à la suite de var_entree dans un nouveau fichier.

    Je croyais que ce serait un jeu d'enfant, grande désillusion! Je n'ai même pas dépassé le stade de lecture de la 1e ligne...

    Vous pouvez m'aider?

  2. #2
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Citation Envoyé par orphean Voir le message
    Vous pouvez m'aider?
    Non, tu n'es pas sur le bon forum, tu devrais poser ce genre de question sur le forum C.
    Par ailleurs pourquoi utiliser du C pour faire ce qui ressemble à du simple traitement de texte ? La plupart des langages sera mieux adapté que le C à une telle problématique, par exemple c'est l'une des spécialités de Perl.

    --
    Jedaï

  3. #3
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 45
    Par défaut
    Pardon si je n'ai pas été assez vigilant sur la nature du forum...
    Merci bien de me le signaler aussi rapidement.
    Je vais poster ça sur un forum du langage C. A moins que...

    J'ai programmé en C il y a un certain temps, et je ne connais pas du tout Perl. C'est pour ça que j'ai commencé par m'orienter vers du C.
    Mais puisque tout conseil est bon à prendre, je voudrais avoir votre avis sur la meilleure façon de faire ce que je voudrais faire: écrire des mots russes en phonologie. C'est un algorithme un petit peu élaboré.
    Sans rentrer trop dans le détail, je fais essayer d'en donner un aperçu.

    - Pour cela, je prends l'exemple de la lettre <е> russe, c'est une voyelle dite molle (souvent prononcé "yé", la voyelle dure correspondante est <э>, souvent prononcée "è").
    - Il me semble nécessaire d'expliquer ici que la plupart des consonnes russes vont par couple, une dure, une molle. Ainsi <не> s'écrit en phonologie /n'e/ et <нэ> s'écrirait /ne/. Dans le 1e cas, /n/ est mou, c'est ce qu'indique l'apostrophe dans /n'e/, dans le 2e cas, /n/ est dur (par défaut, pas d'indication /ne/). Autrement dit, l'orthographe et la phonologie n'ont pas la même transcription. En phonologie, c'est la consonne (de couple) qui est dure ou molle, alors qu'en orthographe, c'est la voyelle. Donc en orthographe, il y en a 10 voyelles, 5 dures, 5 molles, alors qu'en phonologie, il n'y a que 5 voyelles.
    - Quand la même lettre russe <е> commence un mot, elle cache un yod (en français son 'ill' comme paille, mais aussi 'ï' dans aïe, et 'il' dans rail, et aussi 'y' dans noyer; en espagnol 'll' dans paella, en italien 'gl' dans Vintimigla, en portugais 'lh' dans coelho). Dons en début de mot, <ен...> s'écrirait /jen.../.
    - De plus, en russe il existe un signe mou et un signe dur pour séparer une consonne de la voyelle qui suit, si cette voyelle contient un yod.
    <объектив> s'écrit /ob"jekt'iv/
    <коллье> s'écrit /koll'je/
    - Pour finir très vite, certaines consonnes sont toujours dures, d'autres toujours molles, d'autres encore toujours dures avec certaines voyelles et toujours molles avec les autres. Dans ce cas, inutile de rajouter l'apostrophe.

    Pardon si c'est trop long. Mais pour ça, il faut un langage un peu élaboré, et le C m'a paru ce qu'il y avait de mieux, dans la limite de mes connaissances actuelles. Vous confirmez?

    Après votre réponse, je clos cette discussion.

    Cordialement.

Discussions similaires

  1. Fichier contenant des caractères cyrilliques
    Par DSGSLA dans le forum Windows
    Réponses: 1
    Dernier message: 06/08/2010, 14h49
  2. lecture fichier disque dur avec caractères spéciaux.
    Par faitgaffe dans le forum Langage
    Réponses: 1
    Dernier message: 14/03/2010, 20h48
  3. Réponses: 21
    Dernier message: 18/04/2008, 16h53
  4. Lecture fichier par caractère & strcmp
    Par YASIR dans le forum Débuter
    Réponses: 32
    Dernier message: 11/04/2008, 22h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo