Foros del Web » Programación para mayores de 30 ;) » C/C++ »

ordenar registros de un fichero

Estas en el tema de ordenar registros de un fichero en el foro de C/C++ en Foros del Web. hola, quisiera sabe mas o menos como se ordena un fichero con c. Me imagino que se tiene que ordenar por la burbuja, con eso ...
  #1 (permalink)  
Antiguo 02/06/2008, 12:19
 
Fecha de Ingreso: junio-2008
Ubicación: secreto
Mensajes: 65
Antigüedad: 15 años, 10 meses
Puntos: 2
Exclamación ordenar registros de un fichero

hola, quisiera sabe mas o menos como se ordena un fichero con c.

Me imagino que se tiene que ordenar por la burbuja, con eso se pueden ordenar numeros, una estructura, cadenas, etc.. pero mi duda surge por los ficheros.

Yo quiero por ejemplo ordenar un fichero que contiene codigo y nombre, por el campo codigo, pero a la vez que leo no puedo ir guardando y sobreescribiendo, y tampoco puedo crear una estructura de tamaño variable con malloc porque me imagino que tiene que ser una jodienda... el caso que no se me ocurre muy bien como hacerlo

¿alguien tiene alguna idea?

gracias!
  #2 (permalink)  
Antiguo 02/06/2008, 15:59
Avatar de Mephisto  
Fecha de Ingreso: enero-2006
Ubicación: Mexico DF
Mensajes: 184
Antigüedad: 18 años, 3 meses
Puntos: 3
Respuesta: ordenar registros de un fichero

Abres el archivo con "r+", esto te permite actualizar el archivo, solo cuida de no perder los datos que vas leyendo

Código:
File = fopen(RUTA , "r+");
__________________
Saludos...

Todos somos sabios, solo que en diferentes disciplinas...
  #3 (permalink)  
Antiguo 02/06/2008, 17:19
 
Fecha de Ingreso: marzo-2008
Mensajes: 306
Antigüedad: 16 años
Puntos: 6
Respuesta: ordenar registros de un fichero

Yo haría lo siguiente:
- Un array que pueda crecer (con realloc). Cada posición es para una linea del fichero.
- En cada posición del array se guarda unicamente la dirección de la zona de memoria en la que se ha guardado cada linea leída: Por ejemplo, se lee en un buffer de 8K, pero luego se copian los bytes de la línea a una zona de memoria reservada con alloc.

Luego se ordena el array con la funcion de libreria qsort.
__________________
Pop & Rock Bands
Pop Music Stars
  #4 (permalink)  
Antiguo 03/06/2008, 13:31
 
Fecha de Ingreso: junio-2008
Ubicación: secreto
Mensajes: 65
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: ordenar registros de un fichero

muchas gracias!
  #5 (permalink)  
Antiguo 04/06/2008, 01:54
 
Fecha de Ingreso: junio-2008
Ubicación: secreto
Mensajes: 65
Antigüedad: 15 años, 10 meses
Puntos: 2
Exclamación Respuesta: ordenar registros de un fichero

Yo tengo el codigo de abajo, el caso es que consigo recorrer el fichero, pero si introduzco el if dentro del while, me hace un bucle infinito.

¿Es asi como se usa para actualizar un registro?

Código:
     printf("\n\nRegistro a modificar: ");
		scanf("%d",&cod);

		while(!feof(fichero))
			{
			fflush(stdin);
			fscanf(fichero,"%d\t%s\t%d\n",&a,&b,&c);

			if(cod==a)
				{
				fprintf(fichero,"%d\t%s\t%d\n",cod,nuevob,nuevoc);
				}

			}
  #6 (permalink)  
Antiguo 04/06/2008, 02:02
 
Fecha de Ingreso: marzo-2008
Mensajes: 306
Antigüedad: 16 años
Puntos: 6
Respuesta: ordenar registros de un fichero

Yo corregiría ciertos detalles.
- El fflush(stdin) despues del scanf y antes del while
- Cuando se cumpla el if (cod==a) forzar la salida del bucle con un break;
- Modificar el fscanf para leer las cadenas con: fscanf(fichero,"%d\t%[^\t]\t%d\n",&a,&b,&c);
__________________
Pop & Rock Bands
Pop Music Stars
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:02.