• Lunes 29 de Abril de 2024, 14:39

Autor Tema:  Leer una parte concreta de un fichero txt  (Leído 2851 veces)

Ziara

  • Nuevo Miembro
  • *
  • Mensajes: 20
    • Ver Perfil
Leer una parte concreta de un fichero txt
« en: Miércoles 9 de Julio de 2008, 20:33 »
0
Buenas tardes!

Tengo el siguiente código:

Código: Text
  1. while (fgets(linea,sizeof(linea),OutFile) != NULL )
  2.  {
  3.   c = linea[0];
  4.   if (c == "X")
  5.   {
  6.    indice = indice + 1;
  7.    if (indice = index)
  8.    {
  9.     ShowMessage("find");
  10.     ShowMessage(linea);
  11.     fgets(linea,sizeof(linea),OutFile);
  12.     //{
  13.      ShowMessage(linea);
  14.     //}
  15.     break;
  16.    }
  17.   }
  18.  }//while
  19.  

Cuando ejecuto la aplicación, parte la información se me carga en un ListView y otra parte guardado en un fichero txt y lo que pretendo es que cuando pincho sobre una fila del ListView (idenfiticado con la variable index, fila 1 -> int index=1...) me encuentre el bloque de información referida a dicha fila. He puesto en el txt un delimitador de bloque, (cada bloque en el txt empieza por "X") por tanto voy leyendo el fichero y si encuentro una "X" incremento un contador y si ese contador es igual a index he encontrado el bloque de información buscado.

El problema es que no consigo, a partir de encontrar el bloque de información, sacar única y exclusivamente esa información. Tengo puesto un fgets(linea,sizeof(linea),OutFile); dentro del if (indice = index) pero empieza a leer desde la primera linea del fichero.

Como puedo sacar las lineas de información que deseo?

el fichero tiene el siguiente formato:
X
ww
ee
ee
X
er
er
3r
X
et
egt
eg

Las lineas separadas por las "X" forman un bloque de información.

Gracias

sonGoku

  • Nuevo Miembro
  • *
  • Mensajes: 22
    • Ver Perfil
Re: Leer una parte concreta de un fichero txt
« Respuesta #1 en: Jueves 10 de Julio de 2008, 08:11 »
0
En ese código te falta buscar los elementos el código deberia ser:

  while (fgets(linea,sizeof(linea),OutFile) != NULL )
  {
  c = linea[0];
  if (c == "X") {
    indice = indice + 1;
    if (indice = index)   {
       AnsiString sLinea;
       fgets(linea,sizeof(linea),OutFile);
       while (linea[0] != "X"){
          sLinea = (!sLinea.Length()?AnsiString(linea):sLinea + "n"+ AnsiString(linea));
          fgets(linea,sizeof(linea),OutFile);
       }
       ShowMessage(sLinea);
       break;
    }
  }

Ziara

  • Nuevo Miembro
  • *
  • Mensajes: 20
    • Ver Perfil
Re: Leer una parte concreta de un fichero txt
« Respuesta #2 en: Jueves 10 de Julio de 2008, 17:24 »
0
Buenas tardes!

Citar
En ese código te falta buscar los elementos el código deberia ser:

while (fgets(linea,sizeof(linea),OutFile) != NULL )
{
c = linea[0];
if (c == "X")
{
indice = indice + 1;
if (indice = index)
{
AnsiString sLinea;
fgets(linea,sizeof(linea),OutFile);
while (linea[0] != "X"){
sLinea = (!sLinea.Length()?AnsiString(linea):sLinea + "n"+ AnsiString(linea));
fgets(linea,sizeof(linea),OutFile);
}
ShowMessage(sLinea);
break;
}
}

Lo que ocurre es que el código en rojo me saca la primera linea del fichero, y creo que si he llegado dentro del if (indice = index) y al hacer un fgets me debería sacar la línea siguiente de la X encontrada. Esa es mi duda, que no se porque en ese fgets me vuelve a sacar la primera linea del fichero.

Qué estoy haciendo mail?

Gracias

sonGoku

  • Nuevo Miembro
  • *
  • Mensajes: 22
    • Ver Perfil
Re: Leer una parte concreta de un fichero txt
« Respuesta #3 en: Viernes 11 de Julio de 2008, 08:05 »
0
El problema es por el segundo parámetro debe ser unnumero alto por ejemplo 1000, fgets te devolveria 1000 caracteres omenos si encuentra un retorno de carro. Pon esta linea

fgets(linea,1000,OutFile);

suerte ya me cuentas.

Ziara

  • Nuevo Miembro
  • *
  • Mensajes: 20
    • Ver Perfil
Re: Leer una parte concreta de un fichero txt
« Respuesta #4 en: Sábado 12 de Julio de 2008, 10:21 »
0
Hola!!

Ya lo solucioné, había un fallo (tonto) en el código :(

Código: Text
  1. while (fgets(linea,sizeof(linea),OutFile) != NULL )
  2. {
  3.  c = linea[0];
  4.  if (c == "X")
  5. {
  6.  indice = indice + 1;
  7.  [color=#BF0000]if (indice == index)[/color]
  8.  {
  9.   fgets(linea,sizeof(linea),OutFile);
  10.   while (linea[0] != "X")
  11.   {
  12.    fgets(linea,sizeof(linea),OutFile);
  13.    ShowMessage(linea);
  14.   }
  15.   break;
  16.  }
  17. }
  18.  

Principalmente era que la linea en rojo lo tenía como una asignación y no como una comparación...

Ahora tengo otra duda, si al final de cada linea tengo un "/n" y lo quiero quitar, como lo puedo hacer?
Puedo quitar de una linea el último carácter (que este caso sería un "/n")?

Gracias.