Lire un fichier en C

cs_Angelotus Messages postés 6 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 2 juin 2004 - 14 mai 2004 à 22:23
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 - 1 juin 2004 à 20:35
Bonjour,

Je suis étudiante (1ère année) en ingénierie informatique.

J'aurais besoin d'écrire un programme en C qui ouvre un fichier et affiche ce qu'il trouve (avec le bon typage) dans une fenêtre (dos ou windows?).

Sur le fichier, je ne sais qu'une chose: il peut contenir tout type de variable (scalaire type int, float, char, ou complexe type tableau, liste chainée). Je ne connais pas sa longueur.

Quelqu'un pourrait-il m'aider pour la lecture de fichier et l'affichage de base dans une fenêtre, svp?

Merci beaucoup d'avance!

15 réponses

cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
14 mai 2004 à 22:44
par exemple si le fichier contient :

15 3.14 a

il faut lire un int, un double et un char ?

ou alors on recupere tout ca dans une chaine de caractere ?
0
cs_Angelotus Messages postés 6 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 2 juin 2004
14 mai 2004 à 22:58
Je pense qu'il vaudrait mieux que je récupère chaque élément dans une variable du bon type. Avantage: je pourrais les utiliser plus facilement ensuite. Inconvénient: (1) il peut y avoir beaucoup d'éléments, (2) cela implique (??) une génération automatique de nom de variable et, dans ce cas, un moyen de les identifier. Oh la la...

Exemple: si dans ma fenêtre s'affichent 50 lignes, chacune contenant un nombre différent d'éléments, parmi eux des mots, des int, des caractères, des tableaux de float, etc. Je veux pouvoir additionner le 3ème int de la 10ème ligne avec le 20ème int de la 49ème ligne, ou concaténer le 16ème caractère de la 2ème ligne avec le 18ème mot de la 150ème ligne.

Meuh non je me complique pas la vie... ;-)

Merci d'avance si tu peux m'aider.
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
14 mai 2004 à 23:13
Ton programme est tout simplement impossible a réaliser tel que tu le décrit pour la simple et bonne raison qu'en C, la déclaration de variable se fait en avant! Donc IMPOSSIBLE de generer des variables dynamiquement !

Il te faudra donc utiliser des tableaux dynamique si tu veux pouvoir réaliser ton programme!

Si tu as le sujet exact se serait bien de le mettre aussi parceque la on voit pas exactement comment les données vont etre utilisé !

Bref, un peu plus d'explication et d'information, pour un peu plus de réponse et d'aide a ce sujet ;)

Samir
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
14 mai 2004 à 23:30
moi je propose ca :

il faudra utiliser des buffer pour chaque type de base, pour que ce soit moin lourd a gerer, je te conseil un tableau dynamique, au pire tu realloue avec realloc si besoin et a la fin du fichier tu resize

ensuite tu lis le fichier type par type (tu lis un buffer a chaque fois que le type change)

pour faire un tableau unique de buffer de different type utilise une union

typdef union
{
char *c_buf;
int *i_buf;
double *d_buf;
} p_Type;

encapsule ce type dans une agregation pour stocker la taille du buffer

typedef struct
{
p_type buf;
size_t count;
} *GenBuffer;

au debut faudra pas oublier d'initialiser le tableau de buffer en mettant les pointeurs a NULL (apres ca te permettra de savoir de quel type est le buffer, ca sera le seul !=NULL) et count à 0 aussi

quand tu lis le fichier, tu repere d'abord le type, ensuite le nombre d'occurence succesive, apres tu recupere dans un buffer temporaire, puis tu alloue le buffer du type en question dans la struct GenBuffer et tu fais un memcpy

je vois que ca fait pas mal de truc a geré, faut bien diviser l'algo en fonctions...

eu... c'est bien ca qu'il faut faire?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Angelotus Messages postés 6 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 2 juin 2004
15 mai 2004 à 00:22
Ca parait pas mal ton idée. Je creuse ça et je reviens!
Merciiiiiiiiiiiiiiiii!! :-)
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 mai 2004 à 00:22
djil > tu penses faire comment pour determiner si tu rencontres une liste chainee ou non ???
Travail impossible avec le cahier des charges dans cet etat.

ciao...
BruNews, Admin CS, MVP Visual C++
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
15 mai 2004 à 00:28
ben en fait moi d'apres ce que j'ai compris ca sera un fichier acsii, alors liste ou tableau c'est la meme chose, on recupere un buffer du type souhaité, non?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 mai 2004 à 00:35
S'il y a notion de liste chainee alors nenni fichier ASCII, les pointeurs sur suivants seraient ecrits aussi en ASCII ?

ciao...
BruNews, Admin CS, MVP Visual C++
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
15 mai 2004 à 00:39
oui c'est bien ce que je disais, on recupere un buffer c'est tout (apres on est libre d'en faire ce que l'on veut)

si il 'asit d'un fichier binaire, faudarit bien de toute facon qu'il y ai des tag pour savoir ce que l'on recupere, et donc il nous faut plus de precision
0
cs_Angelotus Messages postés 6 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 2 juin 2004
15 mai 2004 à 00:45
De toute manière, ce doit bien être possible puisqu'on me l'a demandé! ;-) (ça c'est la méthode Coué)

En gros, voici le profil du sujet:
- j'ai un fichier dont je ne connais pas la longueur, contenant des variables de tout type dont je ne connais ni le nombre ni l'ordre ni le nom (ça c'est pour l'instant; à terme, mon programme devra aussi pouvoir créer le fichier)
- je dois pouvoir lire le fichier en entier, et afficher son contenu (selon la présentation en ligne faite dans le fichier) dans une fenêtre dos ou windows
- une fois affichés, je dois pouvoir choisir (=accéder directement à) certaines variables pour (1) soit les modifier et ré-enregistrer, (2) soit les utiliser, par exemple dans une formule d'addition, de concaténation, etc. Ce serait en html/php par exemple, je pourrais imaginer que chaque variable est associée à une zone de saisie + bouton de validation (pour la modification) et un bouton de sélection (pour l'utilisation dans une formule).

Après, il y a encore quelques petites choses à faire, mais si déjà j'arrive à faire ça... mon prof sera content, je crois!! :-) Et moi aussi ;-)

Voilà, j'espère que c'est plus clair. Je n'en suis qu'au début de la gestion de projet et n'ai pas encore le "bon" vocabulaire ni, peut-être, le "bon" esprit de l'essentiel... désolée!
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
15 mai 2004 à 00:52
oui, donc les variables sont stocker sous forme de texte, pas en binaire?

par exemple :

45 56 322 565 a 10.2 10.5 nddd

il faut lire un tableau de 4 int, un tableau de 1 char, un tableau de 2 doubles, un tableau de 4 char, c'est ca?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 mai 2004 à 01:06
En tout ascii c'est jouable. Va falloir indexer chaque elem en rapport position dans fichier si tu veux pouvoir les modifier, ajouter etc... et recalcul complet avec indexation a chaque lmodif. Faudra s'adresser direct a l'API du systeme hote pour les perfs sinon ça va ramer, multi thread a envisager serieusement.

ciao...
BruNews, Admin CS, MVP Visual C++
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
15 mai 2004 à 01:13
oui au fait c'est koi le systeme ?

si c'est unix (ou autre linux) il vaut mieux rester standard pour les perfs
0
cs_Angelotus Messages postés 6 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 2 juin 2004
31 mai 2004 à 16:40
Désolée de n'avoir pu vous répondre plus tôt: je me suis absentée quelques jours...

Pour répondre au message "Posté par : djl le 15/05/2004 00:52:26": oui, c'est bien ça.

Pour répondre au message "Posté par : djl le 15/05/2004 01:13:53": le prog doit être utilisable sous Linux et Windows
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
1 juin 2004 à 20:35
woa ca fait longtemps tt ca !
désolé j'ai un peu la flemme de tt relire, mai si ta un probleme pour faire ton truc n'hesite pas !
0
Rejoignez-nous