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

  FORUM HardWare.fr
  Programmation
  C

  [C] Lire un fichier . txt

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Lire un fichier . txt

n°1959915
jovenix
Posté le 23-01-2010 à 19:36:33  profilanswer
 

Bonjour,
J'ai suivit des cours basique de programation en language C et j'ai un projet à rendre pour lundi matin !!
Aucun probléme pour ECRIRE mais je rencontre un probléme pour LIRE dans un fichier .txt et j'ai vraiment besoin de votre aide en tout urgence (Il reste du boulot et j'ai déja passer plusieur heures sur ce probléme) !
 
Le sujet : Coder un programme capable de gérer la location de voitures ... (Je vous la fait courte ^^) !
 
 
MON PROBLÈME :
Je me sert d'une "base de données" contenu dans un fichier .txt contenant les infos de chaque clients sur une unique ligne
EXEMPLE : (deux clients, dans l'ordre : leurs n° d'identifiant, nom, prenom, tel)
ID;1;PERRON;Lucas;0189632147;
ID;2;PARIN;Pierre;0647475814;
 
 
J'utilise donc une structure :
 
typedef struct
{
int idEmploye;
char nom[100];
char prenom[100];
int tel;
int nbrKmEmploye;
int nbrAccident;
}Employe;
 
Le principe c'est que j'appel la base de donner en tout début de programme pour remplir les cases du tableau (dont j'ai besoin par la suite) :
Employe tabEmploye[100];
(Dans notre cas seul les 2 premieres cases seront utilisées)
 
Voici mon code, je compte sur vous pour me dire ce qu'il ne va pas :)
 
 
void miseAJourInitiale ()
{
int i;
char tampon[100]; // Pour eviter un bug qui lit tout la ligne lors du 1er fscanf d'un char
 
FILE *fichier1;
fichier1=fopen("véhicules.txt","r" );
 
if(fichier1==NULL)
fclose(fichier1);
else
{
for (i=1; i<100; i++)
{
if (getc(fichier1) != EOF)
{
fseek(fichier1,2, SEEK_CUR);
fscanf(fichier1,"%d;",&tabEmploye[i].idEmploye);
fscanf(fichier1,"%s;",&tampon);
fscanf(fichier1,"%s;",&tabEmploye[i].nom);
fscanf(fichier1,"%s;",&tabEmploye[i].prenom);
fscanf(fichier1,"%d;",&tabEmploye[i].tel);
fscanf(fichier1,"%d;",&tabEmploye[i].nbrKmEmploye);
fscanf(fichier1,"%d;",&tabEmploye[i].nbrAccident);
 
printf("\n..%d..%s..%s..%d..%d..%d..\n", tabEmploye[i].idEmploye, tabEmploye[i].nom, tabEmploye[i].prenom, tabEmploye[i].tel, tabEmploye[i].nbrKmEmploye, tabEmploye[i].nbrAccident);
}
}
system("PAUSE" );
}
 
fclose(fichier1);
 
}
 
 
Le programme me donne un résultat abérant, ne prennant pas en compte les char (Et les int sont faux ^^)
..1......0..0..
 
PS : je n'ai méme pas encore codé pour rentrer les valeur dans le tableau car les données lut sont erronées vu le résultat du printf ....
 
Je ne peut pas continuer sans votre aide :s  
Un énorme merci par avance car c'est vraiment URGENTISSIME... quitte a faire une nuit blanche

mood
Publicité
Posté le 23-01-2010 à 19:36:33  profilanswer
 

n°1959916
Joel F
Real men use unique_ptr
Posté le 23-01-2010 à 19:41:07  profilanswer
 

passe plutot par fgets puis parse ta ligne via sscanf


Message édité par Joel F le 23-01-2010 à 19:41:22
n°1959917
jovenix
Posté le 23-01-2010 à 19:44:47  profilanswer
 

Merci pour cette réponse déja !
 
Le prob c'est que aprés je pourrais avoir + de 9 employé (donc deux caractéres ...)
Je ne peut pas prévoir a l'avance ...
 
A noté que quand je fait des fprintf avec pour rentrer tout les données juste avant mes fscanf ca marche parfaitement bien ...
 
Par contre quand je fait que de la lecture au début (donc sans ecriture juste avant) ca ne marque plus  et j'ai des valeures abhérantes !

n°1959923
Joel F
Real men use unique_ptr
Posté le 23-01-2010 à 20:25:02  profilanswer
 

le nbr de champ, on s'en tape. Tu ouvres otn ficheir tu lsi chaque ligne et tu traite, et tu contineus quand que tu as des lignes

n°1959935
Sve@r
Posté le 23-01-2010 à 21:15:06  profilanswer
 

Joel F a écrit :

le nbr de champ, on s'en tape. Tu ouvres otn ficheir tu lsi chaque ligne et tu traite, et tu contineus quand que tu as des lignes


T'as les doigts inversés ??? [:rofl]


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1959955
tpierron
Posté le 23-01-2010 à 23:24:13  profilanswer
 

Comme dit Joel, passe par un fgets. Si une lecture de fscanf foire, tu auras du mal à récupérer les enregistrements suivants. Puis utilise les spécificateurs pour traiter la ligne d'un seul bloc avec sscanf, dans le style:
 
Edit: ah ouais, et récupérer le téléphone sous forme d'entier :/. Pas terrible, mieux vaut une chaine de caractère.
 

Code :
  1. void miseAJourInitiale ()
  2. {
  3.     FILE * fichier1;
  4.     char   tampon[128];
  5.     int    i;
  6.     fichier1=fopen("vehicules.txt","r" );
  7.     if (fichier1 == NULL) return;
  8.     for (i = 1; i < 100 && fgets(tampon, sizeof tampon, fichier1); i++)
  9.     {
  10.         Employe * n = tabEmploye + i;
  11.         sscanf(tampon, "ID;%d;%99[^;];%99[^;];%d;%d;%d;",
  12.             &n->idEmploye, n->nom, n->prenom, &n->tel,
  13.             &n->nbrKmEmploye, &n->nbrAccident
  14.         );
  15.         printf("\n..%d..%s..%s..%d..%d..%d..\n", n->idEmploye,
  16.             n->nom, n->prenom, n->tel, n->nbrKmEmploye,
  17.             n->nbrAccident
  18.         );
  19.     }
  20.     fclose(fichier1);
  21. }


 
Bémol: les formats %99[^;] sont un peu casse gueule. S'il y a débordement, ils ne rajouteront par le 0 terminal. J'ai la flemme de voir si c'est conforme C99 ou une bizarrerie de la libc de Microsoft.


Message édité par tpierron le 23-01-2010 à 23:26:30
n°1959996
Joel F
Real men use unique_ptr
Posté le 24-01-2010 à 12:20:06  profilanswer
 

Sve@r a écrit :


T'as les doigts inversés ??? [:rofl]


 
oui :(


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

  [C] Lire un fichier . txt

 

Sujets relatifs
[Python] Supprimer la fin d'un fichier texte[C/SDL] undefined reference to mes fonction
Redirection de la sortie standard vers une ligne d'un fichier texteVSB et excel fichier VALIDE - on peut fermer le post
parcourir fichier CSV (TAB), saut de ligne non détecté[Résolu] boucle for ne retient que la dernière ligne du fichier
Bibliothèque 3D haut niveau en C.suppression structure dans fichier
[C] lire un fichier......mon dieu aidez moi !!Comment lire une image d'un fichier en C++
Plus de sujets relatifs à : [C] Lire un fichier . txt


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