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

Avanzar a una linea específica de un archivo .txt

Estas en el tema de Avanzar a una linea específica de un archivo .txt en el foro de C/C++ en Foros del Web. Saludos, mi duda es la siguiente: Tengo un archivo .txt en el cual guardo una cadena de caracteres por cada linea. Según sé, fseek puede ...
  #1 (permalink)  
Antiguo 27/11/2011, 22:44
Dtc
 
Fecha de Ingreso: marzo-2011
Ubicación: México
Mensajes: 39
Antigüedad: 13 años, 1 mes
Puntos: 1
Pregunta Avanzar a una linea específica de un archivo .txt

Saludos, mi duda es la siguiente:
Tengo un archivo .txt en el cual guardo una cadena de caracteres por cada linea.

Según sé, fseek puede mover el cursor del fichero, pero solo se mueve por letras, así que si escribo esto:

fseek(fp, 10, SEEK_SET);

El cursor se moverá 10 letras después del inicio del archivo "fp".

Si yo tengo en un fichero .txt lo siguiente:

Linea1
Linea2
Linea3
Linea4
Linea5
linea6
linea7
linea8

¿Como puedo hacer que el puntero del archivo se mueva hasta la sexta linea (linea6), sin importar el tamaño de la linea (el contenido de esta puede variar, así que basar el movimiento en la medida de esta no funcionará)?

He intentado esta función:

Código C:
Ver original
  1. void avanzar(int linea)
  2. {
  3. fseek(fp, 0, SEEK_SET);
  4. for (i=0; i=(linea-1);i++)
  5. {    
  6. while (fgetc (fp) != '\n');
  7. }
  8. }

Y en teoría, si yo la invoco de esta manera:

Código C:
Ver original
  1. avanzar(3);

El cursor del archivo debería estar en el inicio de la tercera linea, sin importar en que lugar estaba antes de que la función fuera invocada, pero al compilar no me aparece nada, lo cual me ha dado a entender que hace un bucle infinito, pero no comprendo por qué.

Saludos y gracias de antemano
__________________
La Web del Dtc
http://www.dtcsrni.tk
DtcSrni Technologies
http://technologies.dtcsrni.tk
  #2 (permalink)  
Antiguo 28/11/2011, 23:46
 
Fecha de Ingreso: febrero-2011
Ubicación: Paraguay
Mensajes: 59
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: Avanzar a una linea específica de un archivo .txt

A ver si esto te ayuda
Código C:
Ver original
  1. void avanzar(FILE* file, int lineas) {
  2.     char letra;
  3.     int caracteres=0;
  4.     while(lineas) {
  5.         letra = fgetc(file);
  6.         caracteres++;
  7.         if(letra == '\n') {
  8.             lineas--;
  9.         }
  10.     }
  11.     fseek(file, caracteres, SEEK_SET);
  12. }
No estoy muy seguro, lo cree aca en el foro nada mas, no probe nada..me dices que tal!
Un saludo
  #3 (permalink)  
Antiguo 04/12/2011, 02:57
Dtc
 
Fecha de Ingreso: marzo-2011
Ubicación: México
Mensajes: 39
Antigüedad: 13 años, 1 mes
Puntos: 1
Respuesta: Avanzar a una linea específica de un archivo .txt

No me funcionó la función que me diste :(
Pero se me ocurrió otra que intenté y si funcionó (mi musa hoy si estaba :D)

Aquí la función:

Código C:
Ver original
  1. void lineas(int num)
  2. {
  3. int conta=num-1;
  4. fseek(fp, 0, SEEK_SET);
  5. prueba:    
  6. if (conta>0)  
  7. {
  8. while (fgetc (fp) != '\n');
  9. conta--;
  10. goto prueba;
  11. }
  12. }

así que si uno invoca a la función así:

Código C:
Ver original
  1. lineas(6);
  2. fgets(a, 80, fp);

La función pondrá entonces el puntero en el principio de cualquier número de linea indicada por el argumento de la función (en este caso la 6), sin importar en que linea se encontraba antes o si ya había sido invocada.

Lo posteo para aquellos que lo lleguen a necesitar por que por más que busqué en internet jamás encontré nada que ayudara y eran muchos los que lo preguntaban.
Gracias y Salu2!
__________________
La Web del Dtc
http://www.dtcsrni.tk
DtcSrni Technologies
http://technologies.dtcsrni.tk

Etiquetas: funcion, txt, cadenas
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 09:02.