Lecture fichier colone variable

Sportif_C -  
Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je souhaite stocker un fichier texte binaire (les valeurs sont séparés par un espace) dans une matrice sachant que le nombre de colonne est varibale. Du coup je ne sais pas comment faire pour allouer mon mémoire?
Des idées?
Merci.

int main()
{
   FILE *fichier;
 int nb_lignes;
 int ligne_lue[512];


 //test d'ouverture du fichier
 fichier = fopen(fichier.txt, "r"); // ouvrir en lecture
  if(fichier == NULL){
      printf("Impossible d'ouvrir le fichier");
      exit(1);
  }
// compter et afficher les lignes du fichier
  nb_lignes = 0;
  while(fgets(ligne_lue, 512, fichier) != NULL){
    printf("\t%s", ligne_lue);
    nb_lignes++;
  }
  printf("le fichier %s comporte %d lignes\n", nom_fic, nb_lignes);
  
//allocation de mémoire de matrice??
    int **mat
fclose(fichier);
}
A voir également:

1 réponse

Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663
 
plusieurs possibilités :

* utiliser un tableau assez grand pour stocker toute taille que tu utiliseras (simple à programmer, mais pas toujours possible et potentiellement très gourmand en mémoire, imagine une ligne de 100'000 et 100'000 lignes de 1)

* utiliser une structure dynamique comme des listes chainées (accès potentiellement lent à l'accès et plus compliqué à programmer mais efficace au niveau mémoire)

* redimensionner tes différentes lignes (car une matrice = un tableau de pointeur pour chaque ligne) au besoin. : ex : tu prépares des lignes de 100 cases, si à un moment tu lis 100 valeurs, tu redimensionnes ton tableau à 200 (ou en crée un nouveau et copie les valeurs dedans)
0
Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663
 
ou encore : préciser dans ton fichier, pour chaque ligne, le nombre d'entrées au début de la ligne; comme ça tu crées un tableau de la bonne dimension au début de la ligne une bonne fois pour toutes. Beaucoup mieux que ma dernière proposition.
0