View Full Version : funzione in C con un file csv in output
ciao...sto cercando di creare una funzione in C che dia in output un file csv partendo da una matrice interna al programma
void creazione() {
FILE *fl;
int i,j;
fl=fopen("out.csv","a+");
for (i=0;i<X;++i) {
char *vex=(char *)malloc(2000*sizeof(char *));
for (j=0;j<Y;j++) {
strcat(vex,mat[i][j]);
strcat(vex,",");
}
fputs(vex, fl);
free(vex);
}
fclose(fl);
}
se ad esempio la matrice fosse:
1 2 3
4 5 6
l'output dovrebbe essere:
1,2,3
4,5,6
e invece esce questa schifezza:
x=1,2,3
,x=4,5,6
,
ciao e grazie per l'aiuto!!!
void creazione() {
FILE *fl;
int i,j;
fl=fopen("out.csv","a+");
for (i=0;i<X;++i) {
char *vex=(char *)malloc(2000*sizeof(char *));
for (j=0;j<Y;j++) {
strcat(vex,mat[i][j]);
strcat(vex,",");
}
fputs(vex, fl);
free(vex);
}
fclose(fl);
}
Innanzitutto immagino che mat[i][j] denoti un puntatore a char (altrimenti non avrebbe senso).
Poi comunque non servirebbe nemmeno allocare memoria. Tra l'altro, tu allochi memoria ma non la inizializzi. strcat si aspetta di trovare una stringa terminata dal nullo a cui accodare la nuova stringa.
Ti conviene usare delle semplici fprintf.
perche nn provi a fare cosi ;) ti togli parecchie brighe:
void creazione() {
FILE *fl;
int i,j;
fl=fopen("out.csv","a+");
for (i=0;i<X;++i) {
for (j=0;j<Y;j++) {
fprintf("%i",mat[i][j]);
if(j<Y)fprintf("%s",",");
}
fprintf("%s","\n\r");
}
fclose(fl);
}
sono partito dal presupposto che la matrice sia di interi altrimenti ecco la reference:
http://www.cplusplus.com/reference/clibrary/cstdio/fprintf.html
la matrice č di puntatori a stringhe e non conosco le dimensioni delle stringhe. la matrice č stata creata da un file csv in input allocando memoria con malloc
ho seguito le indicazioni di tglman inserendo questo codice:
void creazione() {
FILE *fl;
int i,j;
fl=fopen("out.csv","a+");
for (i=0;i<X;++i) {
for (j=0;j<Y;j++) {
fprintf(fl, "%s",mat[i][j]);
if(j<Y)fprintf(fl,"%s",",");
}
fprintf(fl,"%s","\n\r");
}
fclose(fl);
}
funziona tranno che per la virgola:
1,2,3
,
4,5,6
,
funziona tranno che per la virgola:
1,2,3
,
4,5,6
,
Nei file csv, dopo l'ultimo valore sulla riga non c'č la virgola (almeno cosė mi sembra di ricordare ....).
Ti conviene farlo cosė:
for (i=0;i<X;++i) {
for (j=0;j<Y;j++) {
fprintf(fl, "%s", mat[i][j]);
if (j<Y-1)
fprintf(fl, ",");
}
fprintf (fl, "\n");
}
Comunque visto l'output che hai postato, molto probabilmente c'č un \n di troppo nella stringa all'ultima colonna dell'array. Da dove ti arrivano le stringhe che hai nell'array?
Nei file csv, dopo l'ultimo valore sulla riga non c'č la virgola (almeno cosė mi sembra di ricordare ....).
Ti conviene farlo cosė:
for (i=0;i<X;++i) {
for (j=0;j<Y;j++) {
fprintf(fl, "%s", mat[i][j]);
if (j<Y-1)
fprintf(fl, ",");
}
fprintf (fl, "\n");
}
Comunque visto l'output che hai postato, molto probabilmente c'č un \n di troppo nella stringa all'ultima colonna dell'array. Da dove ti arrivano le stringhe che hai nell'array?
provando e riprovando sono riuscito a risolvere cosė:
void creazione() {
FILE *fl;
int i,j;
fl=fopen("out.csv","a+");
for (i=0;i<X;++i) {
for (j=0;j<Y;j++) {
fprintf(fl, "%s",mat[i][j]);
if(j<(Y-1))fprintf(fl, ",");
}
}
fclose(fl);
}
GRAZIE DELL'AIUTO!!!!!!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.