Lire des chiffres à partir d'un fichier texte
sonya
-
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je suis débutante avec le langage C.
Je cherche à lire un fichier texte et enregistrer une ligne et sauter une autre : une par une.
par exemple: ayant ces quatre lignes
1 2 2 4 8 7 14
2 1 2 4 8 7 14
1 3 2 5 10 6 12
3 1 2 5 10 6 12
Il me faut enregistrer uniquement : 1 2 2 4 8 7 14
1 3 2 5 10 6 12
J'ai écrit ce bout de code :
if ((entree = fopen(input_file, "r")) != NULL)
{
fscanf(entree, "%d %d %d \n", &nb_nodes, &nb_arcs, &nb_commodities);
//printf("%d %d %d",nb_nodes,nb_arcs,nb_commodities);
nb_edges=nb_arcs/2;
tab = (edge**) malloc(nb_edges * sizeof(**tab));
for (i = 0; i < nb_edges; i++)
{
fscanf(entree, "%d %d %d ", &head, &tail, &nb_facilities);
//printf("%d %d %d ", head, tail, nb_facilities);
courant_edge = ((edge*)calloc(1, sizeof(edge)));
courant_edge->num_edge = i+1;
courant_edge->source= head;
courant_edge->destination = tail;
courant_edge->le = nb_facilities;
taille_individu=taille_individu+courant_edge->le;
courant_edge->cost = ((float*)calloc(nb_facilities + 1, sizeof(float)));
courant_edge->capacity = ((float*)calloc(nb_facilities + 1, sizeof(float)));
for (j = 0; j <nb_facilities; j++)
{
fscanf(entree, "%f %f", &cost, &capacity);
courant_edge->cost[j] = cost;
courant_edge->capacity[j] = capacity;
//printf("%f %f ",courant_edge->cost[j],courant_edge->capacity[j]);
}
tab[i]=courant_edge;
fscanf(entree, "\n");
fclose(entree);
}
else
{
printf("impossible d'ouvrir le fichier input_file. getchar\n");
getchar();
}
}
Cependant lors de l'affichage je trouve qu'il saute des lignes et enregistre des autres de manière non conforme à ce que j'ai attendu.
Pourriez vous m'aider pour résoudre ce problème.
Je suis débutante avec le langage C.
Je cherche à lire un fichier texte et enregistrer une ligne et sauter une autre : une par une.
par exemple: ayant ces quatre lignes
1 2 2 4 8 7 14
2 1 2 4 8 7 14
1 3 2 5 10 6 12
3 1 2 5 10 6 12
Il me faut enregistrer uniquement : 1 2 2 4 8 7 14
1 3 2 5 10 6 12
J'ai écrit ce bout de code :
if ((entree = fopen(input_file, "r")) != NULL)
{
fscanf(entree, "%d %d %d \n", &nb_nodes, &nb_arcs, &nb_commodities);
//printf("%d %d %d",nb_nodes,nb_arcs,nb_commodities);
nb_edges=nb_arcs/2;
tab = (edge**) malloc(nb_edges * sizeof(**tab));
for (i = 0; i < nb_edges; i++)
{
fscanf(entree, "%d %d %d ", &head, &tail, &nb_facilities);
//printf("%d %d %d ", head, tail, nb_facilities);
courant_edge = ((edge*)calloc(1, sizeof(edge)));
courant_edge->num_edge = i+1;
courant_edge->source= head;
courant_edge->destination = tail;
courant_edge->le = nb_facilities;
taille_individu=taille_individu+courant_edge->le;
courant_edge->cost = ((float*)calloc(nb_facilities + 1, sizeof(float)));
courant_edge->capacity = ((float*)calloc(nb_facilities + 1, sizeof(float)));
for (j = 0; j <nb_facilities; j++)
{
fscanf(entree, "%f %f", &cost, &capacity);
courant_edge->cost[j] = cost;
courant_edge->capacity[j] = capacity;
//printf("%f %f ",courant_edge->cost[j],courant_edge->capacity[j]);
}
tab[i]=courant_edge;
fscanf(entree, "\n");
fclose(entree);
}
else
{
printf("impossible d'ouvrir le fichier input_file. getchar\n");
getchar();
}
}
Cependant lors de l'affichage je trouve qu'il saute des lignes et enregistre des autres de manière non conforme à ce que j'ai attendu.
Pourriez vous m'aider pour résoudre ce problème.
A voir également:
- Lire des chiffres à partir d'un fichier texte
- Lire le coran en français pdf - Télécharger - Histoire & Religion
- Lire un fichier epub - Guide
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Creer un groupe whatsapp a partir d'un autre groupe - Guide
1 réponse
Salut,
Si tu veux récupérer des lignes, et bien... récupère des lignes :-)
Pour lire une ligne sur deux, tu peux faire comme cela :
Dans la boucle, utilise tout ou partie des données de la ligne récupérée avec
http://www.cplusplus.com/reference/cstdio/sscanf/
Dal
Si tu veux récupérer des lignes, et bien... récupère des lignes :-)
Pour lire une ligne sur deux, tu peux faire comme cela :
#include <stdio.h> int main(void) { FILE * fich; char st[BUFSIZ]; fich = fopen("data.txt" , "r"); if (fich == NULL) { perror("Error opening file"); return 1; } while (1) { if (fgets(st, 100, fich) != NULL) { printf("j'ai récupéré : %s", st); /* faire ce que tu veux avec la ligne récupérée * en la déchiffrant avec sscanf */ if (fgets (st, 100, fich) == NULL) break; } else { break; } } fclose(fich); return 0; }
Dans la boucle, utilise tout ou partie des données de la ligne récupérée avec
sscanf(), pour les mettre dans tes structures de données.
http://www.cplusplus.com/reference/cstdio/sscanf/
Dal
J'ai testé ce code, et afficher les chaines qu'il a récupéré avant de les manipuler avec sscanf mais je trouve qu'il m'affiche les lignes désordonnées.
chez moi :
affiche correctement une ligne sur deux en commençant avec la première, en utilisant ton jeu de données auquel j'ai rajouté 5 lignes supplémentaires.
Dal