escribir matriz 2D a un archivo en C
Pregunta
Solía ??usar el código a continuación para escribir una matriz 1D a un archivo:
FILE *fp;
float floatValue[5] = { 1.1F, 2.2F, 3.3F, 4.4F, 5.5F };
int i;
if((fp=fopen("test", "wb"))==NULL) {
printf("Cannot open file.\n");
}
if(fwrite(floatValue, sizeof(float), 5, fp) != 5)
printf("File write error.");
fclose(fp);
/* read the values */
if((fp=fopen("test", "rb"))==NULL) {
printf("Cannot open file.\n");
}
if(fread(floatValue, sizeof(float), 5, fp) != 5) {
if(feof(fp))
printf("Premature end of file.");
else
printf("File read error.");
}
fclose(fp);
for(i=0; i<5; i++)
printf("%f ", floatValue[i]);
Mi pregunta es si quiero escribir y leer matriz 2D ??
Solución
Se puede utilizar el mismo método ... sólo realiza los siguientes cambios
float floatValue[3][5] = {{ 1.1F, 2.2F, 3.3F, 4.4F, 5.5F },
{ 6.6F, 7.7F, 8.8F, 9.9F, 8.8F },
{ 7.7F, 6.6F, 5.5F, 4.4F, 3.3F }};
int i,j;
...
if(fwrite(floatValue, sizeof(float), 3*5, fp) != 3*5)
...
if(fread(floatValue, sizeof(float), 3*5, fp) != 3*5) {
...
for(j=0; j<3; j++) {
for(i=0; i<5; i++)
printf("%f ", floatValue[j][i]);
printf("\n");
}
Nota por supuesto que esto no es la mejor manera de guardar / cargar datos especialmente si usted quiere tener cierta compatibilidad entre los diferentes sistemas de compiladores / o incluso sólo con el futuro.
El tema de guardar y restaurar a menudo se denomina serialization
y con sólo una muy pequeña menor sobrecarga se puede conseguir mucho más flexibilidad en especial una vez que el modelo de datos se vuelve más compleja.
Otros consejos
En lugar de un solo bucle va a agregar un otro ej .:
for(i=0;i<lines;i++) {
for(j=0;j<num;j++) {
fprintf(file,"%d ",array[i][j]);
}
fprintf(file,"\n");}