Problème ouverture fichier

wolveryne Messages postés 4 Statut Membre -  
 wolveryne -
Bonjour,
j'essais d'ouvrir un fichier et de le recopié dans un tableau dynamique afin de réaliser des calcul sur ces données
le fichier à ouvrir est en extension .csv

voici le fichier type:

10;1;1,2;0,123;0,2564
12;2;1,3;0,852;545,521
14;3;1,4;0,9451;254,3
16;4;1,5;0,951;56,52
18;5;1,6;0,763;41
20;6;1,7;0,45526;41,23

voici mon programme en C:

#include <stdio.h>
#include <stdlib.h>

void main (){

char nomFichier[255];
int nbcol=1;
int nblig=1;
int i;
int j;
int k=0;
int dix=1;
float inter=0;
float *** data;

FILE *F;

printf("Chemin d'accès du fichier à analyser ?,\n )");
fflush(stdin);
scanf("%s",nomFichier);

F=fopen(nomFichier,"r");

if (F== NULL)
{
printf("Pb ouverture fichier %s",nomFichier);
}

do if(fgetc(F)==';')
nbcol+=1;
while ( fgetc(F)!= '\n');

printf("nbcol vaut %d\n",nbcol);

do if(fgetc(F)==';')
nblig+=1;
while ( fgetc(F)!= EOF);
nblig=(nblig+nbcol)/(nbcol-1);
printf("nblig vaut %d\n",nblig);

data=(float***)malloc(nblig*sizeof(float));
for(i=0;i<nblig;i++)
{
data[i]=(float**)malloc(nbcol*sizeof(float));
}

printf("tab ok \n\n");

for (i=0;i<nblig;i++)
{
for (j=0;j<nbcol;j++)
{
(float)(fread(data[i][j],sizeof(float),(nbcol*nblig),F) !='\0');
printf("%f\n",data[i][j]);
}

}
printf("tabbis ok\n\n");

fclose(F);}

Si quelqu'un peut m'aider merci car actuellement ce code n'y arrive pas à copier les données dans un tableau dynamique.

Je sais c'est du C et non C++
désolé je connais que le C
A voir également:

2 réponses

tatou_38 Messages postés 1954 Date d'inscription   Statut Membre Dernière intervention   121
 
Ton programme ne doit pas faire grand chose.

1. ==>

if (F== NULL)
{
printf("Pb ouverture fichier %s",nomFichier);
}

Si l'ouverture du fichier échoue, F est NULL et tu imprime un petit message. Parfait.
Mais tu continues l'exécution du programme malgré tout ??
Continuer avec F pointeur NULL te mène droit au crash !

2. ==>

do if(fgetc(F)==';')
nbcol+=1;
while ( fgetc(F)!= '\n');

Revois le language C.
En C tu n'as qu'une seule syntaxe de boucle à savoir : for ( ; ; ) ;. Elle est si puissante qu'elle englobe toutes les autres existantes en C.
Revois cette boucle "mal branlée" do ..... while(); et transforme la en boucle for, tu trouveras alors l'erreur.

0
wolveryne
 
Ces modifications ont été apportés elles concernent simplement la manière d'écrire le code qui fonctionnait déja si quelqu'un peut m'aider pour le code en fin du fichier afin de copier les données lu du flux F dans le tableau dynamique en floattants (float) en séparant les nombres à chaque point virgule

c'est à cette étape que je bloque

comment coupé le flux F lu aux points virgules ?
copier ce morceau en float dans le tableau dynamique ?

voici le code qui ne fonctionne pas

for (i=0;i<nblig;i++)
{for (j=0;j<nbcol;j++)
{(float)(fread(data[i][j],sizeof(float),(nbcol*nblig),F) !='\0');
printf("%f\n",data[i][j]);}
0