Ver Mensaje Individual
  #3 (permalink)  
Antiguo 21/12/2006, 08:06
Aprendiz-DAO
 
Fecha de Ingreso: diciembre-2006
Mensajes: 13
Antigüedad: 18 años, 1 mes
Puntos: 1
Re: Como leer un archivo de texto que no se la cantidad de datos?

Bueno te muestro la forma en que lo hice, fijate que lo paso todo a un archivo auxiliar y despues recien ahí a la matriz. Tambien fijate lo que hago para que no muestre lo de la matriz cuando ya no pudo colocar datos en ella porque se termino el archivo (ah, crea los archivos necesarios :) )... (Por supuesto hay muchas más formas de hacerlo):

<--Modificado y reparado :) , gracias MaxExtreme-->

Código:
#include<stdio.h>
#define L 2
#define N 5 // filas    
#define M 6 // columnas



void MostrarMatriz(char MATRIZ[N][M])
{
	int i,j;

	for(i=0;i<N;i++)
	{
		for(j=0;(j<M)&&(MATRIZ[i][j]!='\0');j++)
		{
			printf("%c ",MATRIZ[i][j]);

		}

		if(MATRIZ[i][j]=='\0')
		{
			i=N;
			j=M;
		}
		printf("\n");
	}
}

void Pasar_ArchAux(FILE *archivotxt,FILE *archivoauxtxt, int *nro)
{
	char LETRA[L];
	archivotxt= fopen("DatosMatriz.txt","r");
	archivoauxtxt=fopen("auxiliar.txt","w");

	if((archivotxt==NULL)&&(archivoauxtxt==NULL))
		printf("Error al acceder al archivo");
	else
	{
		fgets(LETRA,L,archivotxt);

		if(LETRA[0]=='\0')
		{
			while(!(feof(archivotxt)))
			{
				if(((LETRA[0]>='0')&&(LETRA[0]<='9')))
					fprintf(archivoauxtxt,"%c",LETRA[0]);
				printf("%s",LETRA);
				fgets(LETRA,L,archivotxt);
			}
		}
		else
			(*nro)--;
	}
	fclose(archivotxt);
	fclose(archivoauxtxt);
}

int main (void)
{
	int posn=0,posm=0,archvacio=1;
	char  caracter, MATRIZ[N][M];
	FILE *archivotxt=NULL, *archivoauxtxt=NULL;

	archivoauxtxt=fopen("auxiliar.txt","r");

	Pasar_ArchAux(archivotxt,archivoauxtxt,&archvacio);

	printf("\n");

	if((archivoauxtxt==NULL)||(archvacio==0))
		printf("Error al acceder al archivo o archivo vacio\n");
	else
	{
		caracter=fgetc(archivoauxtxt);
		for(posn=0;(posn<N)&&(!feof(archivoauxtxt));posn++)
		{
			for(posm=0;(posm<M)&&(!feof(archivoauxtxt));posm++)
			{		
				MATRIZ[posn][posm]=caracter;
				caracter=fgetc(archivoauxtxt);
			}
		}

		posn--;
		if((posn<N)&&(posm<M))
			MATRIZ[posn][posm]='\0';
		else
		{
			posn++;
			if(posn<N)
			{
				posm=0;
				MATRIZ[posn][posm]='\0';
			}	
		}
		printf("Muestro la Matriz resultante:\n\n");
		MostrarMatriz(MATRIZ);
	}

	fclose(archivoauxtxt);
	return 0;
}

Última edición por Aprendiz-DAO; 21/12/2006 a las 10:46