C/Visual C - Necesito ayuda

 
Vista:

Necesito ayuda

Publicado por Mar (5 intervenciones) el 02/08/2005 00:32:52
que tal!!!

tengo un problema necesito realizar un programa en c que haga lo siguiente:

Definir un tipo de datos que represente a una persona, siendo sus campos: el nombre (char *), el apellido (char *), cédula (char [10]) y la edad (int). Llamar PERSONA a este tipo de datos.

Escribir un programa que lea el contenido de un archivo de texto en el que cada línea contenga los datos que definen a una persona (de acuerdo al tipo de datos mencionado anteriormente), y rellene de esa forma una arreglo de variables de tipo PERSONA. El programa debe recibir el nombre del archivo a leer como argumento, teniendo que introducirse éste en la misma línea que ejecuta el programa. Para ello la función main debe tener el prototipo estándar int main(int argc, char *argv[]). El programa debe comprobar que el número de líneas que se van leyendo no supera la dimensión del arreglo definido (Máximo 200). Una vez terminado de leer el archivo debe imprimirse a pantalla los datos de todas las personas (una por línea), y liberarse toda la memoria que se haya ocupado dinámicamente.

si me pudiera ayudar no sabe lo que se los agradezco estoy empezando a llevar c pero no he podido hacer el programa, ya llevo dos dias en el y no se me ilumina la cabeza
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Necesito ayuda

Publicado por fernando.gomez (1603 intervenciones) el 02/08/2005 00:52:53
No me gusta hacerle la tarea a nadie, pero espero que estas líneas te sirvan:

1. Creas una estructura que contenga los campos que te piden (nombre, cedula, etc). Los que sean de tipo cadena de texto, te sugiero que para simplificarte la vida los hagas de un tamaño fijo (digamos 200 caracteres). Si algún campo tiene que ser de tamaño variable por que te lo pida el profesor, me avisas y te cuento el resto. Mientras me ahorro unas líneas.

2. ¿Estás de acuerdo en que el tamaño del archivo en bytes es igual al tamaño de la estructura que creaste por un número n? En efecto, n es el número de registros que tienes, y lo obtienes fácilmente despejando la fórmula anterior (evidentemente esto no es cierto SI tienes cadenas de caracteres de tamaño variable --char* en lugar de char[20] por ejemplo--).

3. Ya que tienes n, abres el archivo (fopen) y entras en un bucle for en donde harás justamente n iteraciones (una por cada registro). En cada iteración leerás del archivo el tamaño de la estructura (sizeof), en bytes y haces un memcpy (si es necesario) hacia una instancia de la estructura. Imprimes los datos en pantalla.

4. Cierras el archivo, y muestras un mensaje al usuario de que el proceso ya terminó.

Evidentemente, este algoritmo se basa en una condición inicial: el archivo binario fué generado guardando la estructura como un búfer y sin agregar más bytes de los de la estructura.

Espero te sirva. Si no te sirve o gusta el algoritmo, dime y vemos de qué otra forma le hacemos.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Necesito ayuda

Publicado por mar (5 intervenciones) el 02/08/2005 21:53:28
no entendi muy bien....
ya pude abrir el archivo, leerlo y creo que capturar los datos en el arreglo pero este no se imprime en pantalla?

no me puedes facilitar un codigo similar que lo haga?

heeeeeelllllllllllllllllllllllllllllllllllllllllllpppppppppppppppppppppppppppppppppppp!!!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Necesito ayuda

Publicado por fernando.gomez (1603 intervenciones) el 03/08/2005 00:25:02
Para leer la estructura, sería algo como:

struct Persona
{
...
};

// en tu método
FILE* pFile;
size_t nRead;
struct Persona objPersona;

pFile = fopen("archivo", "rb"); //abres en binario
if (!pFile) return -1; //error al abrir el archivo

nRead = fread(&objPersona, sizeof(struct Persona), sizeof(structPersona), pFile);
assert(nRead == sizeof(struct Persona)); //si no se cumple la condición, error!

// sacar los datos a la salida estándar (usualmente la consola)
printf("nombre: %s\napellido: %s",
objPersona.nombre,
objPersona.apellido
);

fclose(pFile);

//etc

Nota que el archivo se abre en forma binaria. En Linux no es necesario, pero sí lo es en Windows (por las traducciones de caracteres, sobre todo del retorno de carro y salto de línea. En el código anterior emplee comentarios estilo C++ por comodidad --para no usar /* y */--.

Ya os será más fácil incorporar el anterior código al tuyo --espero--. Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar