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

  FORUM HardWare.fr
  Programmation
  C

  [C] charger un fichier texte en tableau

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] charger un fichier texte en tableau

n°1083158
mrpp
Posté le 14-05-2005 à 13:52:28  profilanswer
 

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

mood
Publicité
Posté le 14-05-2005 à 13:52:28  profilanswer
 

n°1083166
skelter
Posté le 14-05-2005 à 13:59:35  profilanswer
 

je dirais fgets pour lire une ligne, apres tronconne la ligne avec strtok et convertis chaque sous chaine en entier avec strtod


Message édité par skelter le 14-05-2005 à 13:59:54
n°1083199
Emmanuel D​elahaye
C is a sharp tool
Posté le 14-05-2005 à 14:52:06  profilanswer
 

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.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1083200
mrpp
Posté le 14-05-2005 à 14:52:34  profilanswer
 

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
 
:jap:

n°1083203
mrpp
Posté le 14-05-2005 à 14:53:27  profilanswer
 

les réponses vont décidément trop vite sur ce forum
 
merci encore pour la réactivité

n°1083204
Emmanuel D​elahaye
C is a sharp tool
Posté le 14-05-2005 à 14:56:30  profilanswer
 

mrpp a écrit :

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


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.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1083237
mrpp
Posté le 14-05-2005 à 15:43:49  profilanswer
 

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 :whistle:).
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


Message édité par mrpp le 14-05-2005 à 15:44:20
n°1083246
skelter
Posté le 14-05-2005 à 15:51:20  profilanswer
 

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

n°1083263
Emmanuel D​elahaye
C is a sharp tool
Posté le 14-05-2005 à 16:05:59  profilanswer
 

mrpp a écrit :

et pour reprendre les propos d'emmanuelle


Emmanuelle ? Ne rêve pas trop quand même...
C'est Emmanuel...
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1083264
Emmanuel D​elahaye
C is a sharp tool
Posté le 14-05-2005 à 16:06:47  profilanswer
 

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...


Message édité par Emmanuel Delahaye le 14-05-2005 à 17:46:35

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
mood
Publicité
Posté le 14-05-2005 à 16:06:47  profilanswer
 

n°1083330
mrpp
Posté le 14-05-2005 à 17:22:58  profilanswer
 

Emmanuel Delahaye a écrit :

Emmanuelle ? Ne rêve pas trop quand même...
C'est Emmanuel...


 
 
 
 :whistle: 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.

n°1083351
Emmanuel D​elahaye
C is a sharp tool
Posté le 14-05-2005 à 17:45:53  profilanswer
 

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()


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1084253
mrpp
Posté le 15-05-2005 à 15:44:10  profilanswer
 

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).

n°1084297
mrpp
Posté le 15-05-2005 à 16:36:37  profilanswer
 

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

n°1084332
Emmanuel D​elahaye
C is a sharp tool
Posté le 15-05-2005 à 17:00:55  profilanswer
 

mrpp a écrit :


<...>
je suis un peu perdu là, j'ai pas de bouquins de c sous la main,  


C'est une plaisanterie ?
google:  man fgets
 
Ton code mis au point. Pose des questions si tu ne comprends pas.


#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
 
int main (void)
{
   char const fname[] = "../data/test.txt";
   FILE *fic = fopen (fname, "r" );
 
   if (fic != NULL)
   {
      char msg[20];
 
/* le fichier test.dat est constitue de lignes
 * de type 1 2 3 4 5.... de moins de vingt caracteres
 
1 2 3 4 5 6
7 8 9 10 11
12 13 14 15
 
 */
      while (fgets (msg, sizeof msg, fic) != NULL)
      {
         char *pend = msg;
         printf ("msg='%s'\n", pend);
 
         while (pend != NULL && *pend != '\n' && *pend != 0)
         {
            long n = strtol (pend, &pend, 10);
            printf ("n=%ld\n", n);
         }
      }
      fclose (fic), fic = NULL;
   }
   else
   {
      perror (fname);
   }
   assert (fic == NULL);
   return 0;
}


Message édité par Emmanuel Delahaye le 15-05-2005 à 18:21:58

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1084421
mrpp
Posté le 15-05-2005 à 18:03:01  profilanswer
 

Emmanuel Delahaye a écrit :


C'est une plaisanterie ?
google:  man fgets
 


 
 
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 :jap:  
 
 

n°1084422
mrpp
Posté le 15-05-2005 à 18:03:32  profilanswer
 

en gros c'était super bete

n°1084475
Emmanuel D​elahaye
C is a sharp tool
Posté le 15-05-2005 à 18:20:43  profilanswer
 

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é...


Message édité par Emmanuel Delahaye le 15-05-2005 à 18:39:16

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1084496
mrpp
Posté le 15-05-2005 à 18:27:35  profilanswer
 

Emmanuel Delahaye a écrit :

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'aurais fait remarqué...


 
 
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  

n°1084514
Emmanuel D​elahaye
C is a sharp tool
Posté le 15-05-2005 à 18:41:06  profilanswer
 

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.
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1084520
mrpp
Posté le 15-05-2005 à 18:46:23  profilanswer
 

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.
 

n°1084530
Emmanuel D​elahaye
C is a sharp tool
Posté le 15-05-2005 à 18:54:04  profilanswer
 

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...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
mood
Publicité
Posté le   profilanswer
 


Aller à :
  FORUM HardWare.fr
  Programmation
  C

  [C] charger un fichier texte en tableau

 

Sujets relatifs
URGENT modification d un fichier avec kix32[Resolu] Bug de lecture de fichier : encodage
c++ builder créer fichier installparametre a l'ouverture de fichier excel
écrire où on veut dans un fichier .txt[ C++ ] Passer par adresse un vecteur à 2 dimensions + malloc
telecharger un fichier texte[log4j] fichier log vide
[C++] Bug lors de la création d'un fichier -> devient unicode 
Plus de sujets relatifs à : [C] charger un fichier texte en tableau


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