transformer un fichier de données en tableau

transformer un fichier de données en tableau - C - Programmation

Marsh Posté le 16-03-2005 à 11:37:42    

Coucou,
 
je debute en C. J'ai un fichier data.txt sous forme de colonnes de données et j'aimerais les transferer dans un tableau 2D. Comment faire?
merci beaucoup de m'aider!! :jap:

Reply

Marsh Posté le 16-03-2005 à 11:37:42   

Reply

Marsh Posté le 16-03-2005 à 12:13:12    

cassiopee75 a écrit :

Coucou,
 
je debute en C. J'ai un fichier data.txt sous forme de colonnes de données et j'aimerais les transferer dans un tableau 2D. Comment faire?
merci beaucoup de m'aider!! :jap:


C'est un peu violent si tu débutes vraiment...
 
Si le nombre d'éléments est indéterminé, il faut partir d'une tableau vide (T **) et le créer et le remplir au fur et à mesure avec malloc()...
 
Ne sachant pas ce que tu connais en C, difficile d'en dire plus... Fait de ton mieux et poste ton code.
 


---------------
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/
Reply

Marsh Posté le 16-03-2005 à 12:58:02    

quand je dis que je debute, c'est pour dire que je ne suis pas une pro du C bien que je programme en C.  
 
En fait, mon probleme, c'est quelle fonction utiliser pour lire mon fichier texte qui est sous forme de colonnes de données, extraire ses données pour les rentrer dans un tableau. Je vois ce que tu veux dire en utilisant un tableau dynamique, mais avant cela, comment extraire ces données?

Reply

Marsh Posté le 16-03-2005 à 13:04:51    

Reply

Marsh Posté le 16-03-2005 à 13:09:16    

merci, je vais essayer ça  :)

Reply

Marsh Posté le 16-03-2005 à 13:26:08    

Bonjour

Citation :

Si le nombre d'éléments est indéterminé, il faut partir d'une tableau vide (T **) et le créer et le remplir au fur et à mesure avec malloc()...  


 
Serait-il possible de développer le propos.
Si on fait un malloc à chaque entrée, le temps d'exécution ne risque-t-il pas d'être assez élevé ?
S'agit-il de malloc successif par blocs ?
n'y-a-t-il pas à un moment une double allocation ?
Peut-on connaitre les raisons de cette stratégie ?
Merci
Cordialement
 

Reply

Marsh Posté le 16-03-2005 à 14:26:12    

db__ a écrit :


Citation :

Si le nombre d'éléments est indéterminé, il faut partir d'une tableau vide (T **) et le créer et le remplir au fur et à mesure avec malloc()...  


Serait-il possible de développer le propos.
Si on fait un malloc à chaque entrée, le temps d'exécution ne risque-t-il pas d'être assez élevé ?


Pas plus que si on faisait une liste chainée... En fait se sera plutôt à coup de réalloc() quand le besoin s'en fait sentir (tableau de pointeurs) et malloc() pour chaque 'ligne').

Citation :


S'agit-il de malloc successif par blocs ?


Les deux mon général !  

  • tableau de pointeur : par bloc (doublage...)
  • éléments : à la demande.
Citation :


n'y-a-t-il pas à un moment une double allocation ?


??? parse error...

Citation :


Peut-on connaitre les raisons de cette stratégie ?


J'en vois pas d'autre (si il s'agit d'aboutir à un pseudo-tableau à 2 dimensions).


---------------
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/
Reply

Marsh Posté le 16-03-2005 à 14:29:36    

cassiopee75 a écrit :

En fait, mon probleme, c'est quelle fonction utiliser pour lire mon fichier texte qui est sous forme de colonnes de données, extraire ses données pour les rentrer dans un tableau. Je vois ce que tu veux dire en utilisant un tableau dynamique, mais avant cela, comment extraire ces données?


Ca dépend comment est organisé ton fichier...
 
http://mapage.noos.fr/emdel/notes.htm#fichiers
 

  • Pour ligne une ligne de texte : fgets()
  • Pour analyser la ligne sscanf() si le format est suffisament stable, sinon parser 'à la main (strtok(), strstr(), strchr(), strtol() etc.)


---------------
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/
Reply

Marsh Posté le 16-03-2005 à 14:59:51    

merci beaucoup a vous deux!! :jap:  
 
j'ai reussi a extraire en utilisant fgets pour récuperer les données des colonnes dont j'avais besoin. J'ai converti les données qui etait en format string en format float et je rentre mes données dans un tableau dynamique **tab.
Seul probleme, j'ai du mal a utiliser malloc pour **tab. J'ai mis ça:
float **tab=malloc(sizeof(float*))
 
est ce juste? :heink:  
 

Reply

Marsh Posté le 16-03-2005 à 15:05:06    

ah attendez, je viens de voir que vous m'avez mis sur la voie avec  
 

Citation :

En fait se sera plutôt à coup de réalloc() quand le besoin s'en fait sentir (tableau de pointeurs) et malloc() pour chaque 'ligne').


 
je vais voir ce que je peux faire avec cela...
 
merci merci :sol:

Reply

Marsh Posté le 16-03-2005 à 15:05:06   

Reply

Marsh Posté le 16-03-2005 à 17:30:53    

pour éviter des pertes de perfs, tu réalloues par pas de N entrées, en maintenant la capacité de ton bloc alloué et la taille utilisée , et tu réalloues uniquement quand taille utilisée == capacité avec realloc( capacité+N ) à chaque fois.  
 
vu autrement avec N = 16, tu réalloueras 16 entrée tous les 16 données lues.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed