Programación General > C++ Builder

 Leer una parte concreta de un fichero txt

(1/1)

Ziara:
Buenas tardes!

Tengo el siguiente código:


--- Código: Text ---while (fgets(linea,sizeof(linea),OutFile) != NULL ) {  c = linea[0];  if (c == "X")  {   indice = indice + 1;   if (indice = index)   {    ShowMessage("find");    ShowMessage(linea);    fgets(linea,sizeof(linea),OutFile);    //{     ShowMessage(linea);    //}    break;   }  } }//while 
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:
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:
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;
}
}
--- Fin de la cita ---

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:
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:
Hola!!

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


--- Código: Text ---while (fgets(linea,sizeof(linea),OutFile) != NULL ){ c = linea[0]; if (c == "X"){ indice = indice + 1; [color=#BF0000]if (indice == index)[/color] {  fgets(linea,sizeof(linea),OutFile);  while (linea[0] != "X")  {   fgets(linea,sizeof(linea),OutFile);   ShowMessage(linea);  }  break; }} 
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.

Navegación

[0] Índice de Mensajes

Ir a la versión completa