charger un fichier texte en tableau [C] - C - Programmation
Marsh Posté le 14-05-2005 à 13:59:35
je dirais fgets pour lire une ligne, apres tronconne la ligne avec strtok et convertis chaque sous chaine en entier avec strtod
Marsh Posté le 14-05-2005 à 14:52:06
skelter a écrit : je dirais fgets pour lire une ligne, apres tronconne la ligne avec strtok et convertis chaque sous chaine en entier avec strtod |
Pas besoin de strtok(), Une boucle avec strtod() ou strto[u]l fait le boulot. Utiliser le 2ème paramètre.
Marsh Posté le 14-05-2005 à 14:52:34
ouh la que de termes barbares strtok, strtod....
mais ca ressemble bien à ce que je pensais, merci pour l'indication, je vais creuser pour voir ou ca méne, et comment marche ces fonctions
Marsh Posté le 14-05-2005 à 14:53:27
les réponses vont décidément trop vite sur ce forum
merci encore pour la réactivité
Marsh Posté le 14-05-2005 à 14:56:30
mrpp a écrit : ouh la que de termes barbares strtok, strtod.... |
C'est simple en fait.
str : concerne les chaines (strings)
tok : de 'token', élément unitaires d'un analyseur.
tod : to d : vers double : conversion chaine vers double.
tol : to l : vers long : conversion chaine vers long.
toul : to ul : vers unsigned long : conversion chaine vers unsigned long.
Marsh Posté le 14-05-2005 à 15:43:49
je vois pas très bien comment je pourrais me passer de strtok, je vais être obligé de tronconner ma chaine de caractères en éléments unitaires sinon il va me faire un tableau une dimension avec des doubles 1010111011000010010 ce qui ne m'intéresse pas.
A moins que je ne me trompe (ce qui peut arriver parfois ).
Au fait strtoi (to int) n'a pas l'air d'exister c'est dommage j'aurais pu ganger une ligne de code ( je pinaille...)
et pour reprendre les propos d'emmanuelle "c'est simple en fait" comme toujours
Marsh Posté le 14-05-2005 à 15:51:20
j'ai été trop vite, tu peux en effet te passer de strtok
lis le man a propos su 2e parametres de strto*
http://www.rt.com/man/strtol.3.html
Marsh Posté le 14-05-2005 à 16:05:59
mrpp a écrit : et pour reprendre les propos d'emmanuelle |
Emmanuelle ? Ne rêve pas trop quand même...
C'est Emmanuel...
Marsh Posté le 14-05-2005 à 16:06:47
mrpp a écrit : je vois pas très bien comment je pourrais me passer de strtok,<...> |
On te l'a déjà dit : strto[u]l()...
edit : faute de frappe corrigée...
Marsh Posté le 14-05-2005 à 17:22:58
Emmanuel Delahaye a écrit : Emmanuelle ? Ne rêve pas trop quand même... |
ah oui mince j'ai lu trop vite excusez moi monsieur Delahaye, je le referais plus, et pour strtol[u]() aussi, j'ai cru que c'était une faute de frappe, bon je vais arréter les questions pour aujourd'hui, je me plongerais bien à fond demain, sinon je risque encore de cumuler les bourdes.
Marsh Posté le 14-05-2005 à 17:45:53
mrpp a écrit : <...>pour strtol[u]() aussi, j'ai cru que c'était une faute de frappe |
C'est une faute de frappe. C'est strto[u]l(), ce qui signifie:
strtol()
ou
strtoul()
Marsh Posté le 15-05-2005 à 15:44:10
Je viens de tester, merci encore pour vos réponses. Ca marche pas mal mais j'ai encore du taffe sur les pointeurs et les chaines de caractere pour comprendre comment me servir du deuxième argument de strtol.
Mais bon d'ici à ce soir ça devrait marcher (enfin je l'éspére).
Marsh Posté le 15-05-2005 à 16:36:37
alors voila ou je me trouve actuellement
#include <stdio.h>
int main(void)
{
FILE * fic;
char msg[20],*end;
long n;
fic = fopen("test.dat", "r" );
/* le fichier test.dat est constitué de lignes de type 1 2 3 4 5.... de moins de vingt caractéres*/
fseek( fic, 0, SEEK_SET);
fgets( msg, sizeof(msg), fic);
printf( "%s", msg);
fgets( msg, sizeof(msg), fic);
printf( "%s", msg);
/* jusque là ca marche ca m'affiche bien mes lignes de caractère */
n=strtol(msg,&end,6);
printf( "%d\n", n);
/*la aussi ca marche ca me prend le premier caractere le transforme long*/
/*la c'est le début de la fin*/
/*comme je voyais pas comment me servir du deuxieme argument je l'ai rangé */
/*betement en premier argument. mais après j'ai plus que des zéros*/
n=strtol(&end,&end,6);
printf( "%d\n", n);
n=strtol(&end,&end,6);
printf( "%d\n", n);
/*donc je me suis dit peut etre que ca pointe sur l'espace et à chaque fois sur*/
/*le meme caractere j'ai donc tenté de décaler le pointeur de 1*/
/*ca me sort un résultat diff de 0 mais rien que je n'arrive à comprendre*/
n=strtol(&end+1,&end,6);
printf( "%d\n", n);
fgets( msg, sizeof(msg), fic);
printf( "%s", msg);
}
je suis un peu perdu là, j'ai pas de bouquins de c sous la main, donc il faudra que j'attende la semaine prochaine pour passer à la bibliothéque. Si vous avez la patience de m'expliquer ou si c'est super bête faites le moi savoir.
Bonne fin de week end
Marsh Posté le 15-05-2005 à 17:00:55
mrpp a écrit : |
C'est une plaisanterie ?
google: man fgets
Ton code mis au point. Pose des questions si tu ne comprends pas.
|
Marsh Posté le 15-05-2005 à 18:03:01
Emmanuel Delahaye a écrit : |
Je vois en quoi le fait de ne pas avoir de bouquins sous la main reléve de la plaisanterie. fgets n'est pas mon problème ,et je me focalisais sur strtol, mon problème. J'y comprends pas grand chose aux chaines de caractéres avec lesquels je ne suis pas familier, et j'ai un peu de mal avec les pointeurs (mais ça commence à rentrer). Je voulais donc prendre un livre de C pour reprendre doucement toutes les bases. Ce qui présentait l'avantage d'avoir une oraganisation moins bordellique qu'internet, d'orienter les recherches, et de filer un tant soit peu de théorie. maintenant j'ai l'impression de t'avoir quelque peu exaspéré avec mes questions un peu con mais je dois te reconnaitre une grande qualité de continuer à me répondre avec pertinence et patience.
et en gros mon erreur dans mon code tout moche est d'avoir mélangé end avec &end. merci
Marsh Posté le 15-05-2005 à 18:20:43
mrpp a écrit : Je vois en quoi le fait de ne pas avoir de bouquins sous la main reléve de la plaisanterie. fgets n'est pas mon problème ,et je me focalisais sur strtol, mon problème. |
Alors "man strtol" ...
Sinon, sur mon site (ma .sig) j'indique une références de bouquin en ligne... ( en anglais)
Citation : J'y comprends pas grand chose aux chaines de caractéres avec lesquels je ne suis pas familier |
"Une chaine de caractère est un tableau de char terminé par un 0."
Quels sont les mots que tu ne comprends pas ?
Citation : et j'ai un peu de mal avec les pointeurs (mais ça commence à rentrer). Je voulais donc prendre un livre de C pour reprendre doucement toutes les bases. |
En général, c'est par là qu'on commence!
Citation : et en gros mon erreur dans mon code tout moche est d'avoir mélangé end avec &end. |
Ce que n'importe quel compilateur bien reglé t'aurait fait remarqué...
Marsh Posté le 15-05-2005 à 18:27:35
Emmanuel Delahaye a écrit : Alors "man strtol" ...
|
j'aime beaucoup le papier, j'en mange même, donc les bouquins en ligne c'est pas mon trip et j'ai pas l'habitude de manipuler des chaines de caractere, mais tu n'étais pas forcément obligé de reprendre chaque point de mes messages pour essayer de m'enfoncer.
A la prochaine
Marsh Posté le 15-05-2005 à 18:41:06
mrpp a écrit : j'ai pas l'habitude de manipuler des chaines de caractere |
Une fois que tu as la définition gravée dans le crâne, je ne vois pas bien quels problèmes tu peux avoir... à part un manque d'entrainement.
Marsh Posté le 15-05-2005 à 18:46:23
bon moi je m'arréte de te répondre là, j'aurais plein de trucs à dire, du genre je débute en programmation, j ai pas toutes les fonctions en tête, celle que je connais je ne vois pas toute leur portée... ou un manque d'entrainement.
mais comme tu te bornes à ne lire que ce qui t'intéresse dans mes messages, je ne tiendrais plus compte de tes remarques, même si je passe à coté d'une aide fort utile. Nous n'avons pas tous ton niveau en programmation ni même l'habitude de conceptualiser correctement des questions en programmation, alors je ne tenterais plus de t'expliquer ce que tu ne veux pas comprendre.
Marsh Posté le 15-05-2005 à 18:54:04
mrpp a écrit : <...> je ne tenterais plus de t'expliquer ce que tu ne veux pas comprendre. |
Tu fais ce que tu veux, t'es grand...
Marsh Posté le 14-05-2005 à 13:52:28
bonjour,
je me retrouve encore avec un petit souci de programmation. J'ai tout d'abord un programme qui me crée des images de type PBM, images monochromes, en fait simplement un fichier texte qui ressemble à ca
P1 (ca c'est pour dire que c'est un PBM)
3 3 (la taille de l'image ici 3x3)
1 0 1
0 0 0
0 1 0 (la valeur des pixels)
jusque là pas de problèmes, tout ce passe pour le mieux mais j'ai ensuite besoin de créer un programme qui va exploiter ces images. Donc toujours en C je veux pouvoir transformer mon fichier texte en tableau 2 dimensions. fscanf ne me permet pas de le faire aussi facilement que je le voudrais (des dizaines voire des centaines de \t ou \n à taper ca ne me botte pas) donc si quelqu'un a déjà rencontré le problème, il aura peut être des pistes à me proposer.
Si jamais je n'ai pas été assez clair n'hésitez pas à me poser des questions.
Bon Week end