ayuda funcion seek()

Hola!
tengo un archivo de texto en mi SD, quiero apuntar las líneas de dicho archivo con un puntero para poder moverme de una a otra. Por lo que he estado mirando por ahí la función que más se ajusta a lo que necesito es la de seek(). Lo que he encontrado de ejemplos es muy poco y no me ha quedado muy claro como funciona la instrucción. He entendido lo siguiente, hay dos formas de usarla:

  • archivo.seek(pos): busca una posición en el archivo y devuelve true o false y la encuentra o no.
    -archivo.seek( , , ,) : el primer espacio es para el puntero a archivo, el último para situarse en el archivo(SEEK_SET(principio),SEEK_CUR(posición actual),SEEK_END(final)), pero la posición del medio no se para que sirve.

Esta última es la que yo necesito, pero no se usarla.

Me podría ayudar alguien? Muchas gracias.

Hola,
el valor del medio es para decirle cuántas posiciones tiene que desplazarse a partir del punto que se indica en el tercero. Mira en google "fseek", que es el nombre de la función en C

Gracias por contestar curro92.
Voy a seguir mirando por internet porque no se si me servirá esta instrucción para lo que busco, quiero apuntar con el puntero y que me lea toda una línea y así consecutivamente(no puedo dar un número de desplazamiento fijo puesto que las líneas son de distinto tamaño). Podría poner en el medio condición de salto de línea? así estaría todo solucionado.

Eskerrik asko!

Hola,
no entiendo muy bien: ¿quieres leer líneas de texto, pero no secuencialmente, si no eligiengo tú la línea en cada caso? Para eso se supune que tienes una lista de posiciones del comienzo de cada línea, por ejemplo en un long posiciones[MAX_POSIC]. ¿Tienes esa lista de posiciones? Para usar seek() o tienes el fichero organizado en registros de longitud igual, o necesitas una especie de índice de comienzos de línea en un array long. La otra posibilidad es no usar seek() e ir leyendo secuencialmente las líneas hasta llegar a la que interese.

Buenas,
yo tengo un archivo de texto con una cantidad de líneas que leo como caracteres,cada línea puede variar su tamaño.
No he creado ningun array de posiciones puesto que en ocasiones el número de líneas es muy grande.
Lo que intento hacer en mi programa es una comparación de datos entre una línea y otra y según el resultado apuntar a una u otra.Es aquí donde no encuentro la solución, como puedo pasar de líneas con el puntero???

Hola,
tendrías que guardar la posición del puntero al empezar a leer la línea en una variable long. Para obtener la posición en C se usa ftell(), en tu caso creo
long posicion1 = archivo.position();

a ver si me he enterado, la instrucción archivo.position() me devuelve una posición del archivo, en mi caso quiero que sea la que apunta el puntero(en cada comienzo de línea).
Pero como las relaciono? Es que el tema de los punteros es algo que nunca se me ha dado bien... he probado esto y me da error (puede que sea una burrada..)

unsigned long *p;
unsigned long pos;

pos=dataFile.position();
p=pos; // Seguramente así no se hace para que el puntero apunte a la posicion que quiero

Hola,
cuando aquí hablo de puntero me refiero al puntero que lee el fichero, no se trata de punteros a variables.
Cuando abres un fichero, si haces

pos=dataFile.position();

dará pos = 0
Si lees 10 caracteres (bytes) desde el fichero, entonces será pos = 10

En tu caso, si tuvieras que tratar 10 líneas definiría un

long pos[10]; // 10 enteros largos que guarden las 10 posiciones de comienzo de cada línea

Para poder saltar de una línea a otra, primero tendrás que guardar la posición del comienzo de cada línea en pos[]
(Eso lo podrías hacer al grabarlas la primera vez, o haciendo una lectura secuencial de principio a fin, tomando la position() al comienzo de cada línea)
Cuando quieras leer la línea 5, haces archivo.seek(miFichero, long[4], SEEK_SET); y luego lees hasta el final de línea.

Muchíisimas gracias Curro92, me has ayudado mucho, la verdad es que tenía un buen lio de conceptos y me has aclarado. He conseguido hacer el programa que quería!!!! Además me di cuenta que se podía hacer de otra forma más sencilla:

  • ir leyendo cada línea (diferenciando el carácter salto de línea)
  • separo los datos de esa línea que yo quiero usar
  • leo siguiente línea y separo datos
  • opero con los datos separados y me quedo con el valor y línea que me interesa
  • me guardo este valor en una variable y voy comparando sucesivamente con los siguientes
  • repito esta operación hasta el final de archivo

GRACIASS POR TU TIEMPO Y AYUDA!!!!

Hola,
me alegro de que hayas aclarado tus dudas.