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
Ir a la versión completa