Bonsoir à tous,
Pour m'entraîner en C, je réalise en ce moment un programme permettant de tenir des comptes, des budgets.
Les fichiers de budget sont formattés comme ceci :
Chaque ligne contient une opération (un crédit ou un débit).
Code : Sélectionner tout - Visualiser dans une fenêtre à part date,montant,motif,nouveau_solde
Les nouvelles opérations sont ajoutées au début du fichier
Exemple de fichier :
Je suis en train de créer une fonction qui lit une operation et enregistre les valeurs dans une structure déclarée comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 05/01/2007,-50.99,achat telephone portable,449.01 02/01/2007,200.0,etrennes,500.0 30/12/2006,-25.0,cadeau pour tante yvonne,300.0
Voici le prototype de ma fonction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 typedef struct Operation { char s_date[LONG_DATE]; double montant; char s_motif[LONG_MOTIF]; double nouveau_solde; } Operation;
Je me demande comment lire l'entrée formattée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 /* n_op est le numero de l'operation, 1 etant la plus recente */ int lire_operation_fmt(FILE *fp_compte, size_t n_op, Operation *op);
J'ai tout de suite rejeté fscanf() car si le fichier est modifié incorrectement de l'extérieur, le programme donne un comportement indéfini, c'est bien ça ?
Je me suis alors décidé à lire la ligne concernée avec fgets(), puis de tout faire à la main. Mais le travail devient fastidieux. Il faut copier, jusqu'à rencontrer une virgule, le contenu de la ligne dans une nouvelle variable, qu'il faut convertir en double si nécessaire. Le nombre d'erreurs à gérer me paraît impressionant (ligne inexistante, format incorrect de la ligne, chaines trop longues, nombres impossibles à convertir en double...).
Auriez-vous une autre méthode pour lire ces valeurs séparées par des virgules , ou celle que je me suis proposée est la seule possible ?
Par avance, merci![]()
Partager