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:

=◄абз:а:ц►, -а, тв. -ем, р. мн. -ев║
=◄абрик:о:с►, -а, р. мн. -ов║

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:
512
>>> =<<<
Et là, j'ai plus arrêté de croire que je pourrais y arriver seul... J'ai quand même essayé une dernière chose: j'ai eu l'idée de changer mon fichier de données en:
=<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?