C/Visual C - ESTRUCTURAS

 
Vista:

ESTRUCTURAS

Publicado por BULE BU (46 intervenciones) el 17/03/2006 08:41:22
tengo una estructura donde manejo estos atributos

struct reg {
int matricula;
char nombre[15],apellido[15]
}
dato;

estoy usando arhivos al hacer la parte de mostrar los datos, me gustaria ordenar los datos
pero no se como :S , solo lo hehecho con arreglos, alguien me podria dar ideas de como ordenarlos dentro del archivo
quedria eternamente agradecido,
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:ESTRUCTURAS

Publicado por Gaucho (2 intervenciones) el 17/03/2006 22:02:20
Yo tengo algunas ideas distintas
Podrías usar

struct reg {
int matricula;
char *nombre;
char *apellido;
}
dato

Luego, con el puntero "lees" desde la RAM el primer caracter de la palabra
Una vez que recuparas toda la palabra con el puntero lo cargas en un *.txt, mediante

printf( PFILE, dato->nombre , "/ t" );
printf( PFILE, dato->apellido , "/ t" );

Desde luego, esto es para un sólo registro...Si tenes varios registros podrías usar un "while" ó un arreglo de punteros desde adentro de la struct

El /t, es un caracter de tabulación, que te dejará espacio lateral entre dato y dato

Espero serte de utilidad ="A programar se aprende programando"
Suerte
Gaucho
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:ESTRUCTURAS

Publicado por fernando.gomez (1603 intervenciones) el 18/03/2006 00:08:22
>
>struct reg {
>int matricula;
>char *nombre;
>char *apellido;
>}
>dato ;
>
>printf( PFILE, dato->nombre , "/ t" );
>printf( PFILE, dato->apellido , "/ t" );
>

Esto te va a ocasionar un comportamiento indefinido, en el mejor de los casos una excepción y en el peor de los casos, que le salga humo a tu computadora. Como lo estás haciendo creo que está bien.

Si tu archivo no contiene muchos registros, puedes cargarlos en un array, hacer el sort en dicho array (quicksort, bubblesort, etc: como lo sepas hacer) y guardas cada elemento en el archivo.

Si tiene muchos registros, una opción es tener la posición que ocuparía el campo dentro del bloque de memoria que ocupa tu objeto serializado (en este caso, struct reg). Por ejemplo, en tu ejemplo creo que matricula sería tu llave. Entonces el primer registro se encuentra desde el byte 0 hasta el byte sizeof(int). El segundo registro se encuentra en el byte sizeof(struct reg) + 1 hasta el byte sizeof(struct reg) + 1 + sizeof(int). Etcétera.

Así, entonces sólo tienes que cargar en tu archivo las llaves (matrículas), las ordenas y después copias los datos del archivo original a otro archivo, pero ahora en el orden enq ue estén las matrículas. Ahora, se supone que ya sabes, i.e., que la matrícula 2 está en el primer bloque de memoria, mientras que la 1 está en el segundo bloque. Así, cuando escribas la matrícula 1 la sacas del segundo bloque de memoria -- sizeof(struct reg) + 1 hasta sizeof(struct reg)*2 -- y la escribes en la primera posición (solo haciendo un append, dado que tu archivo es nuevo). Y así te sigues.

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