Ayuda con programa en C++

Iniciado por andergedon, Abril 27, 2017, 07:49:08 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Abril 27, 2017, 07:49:08 PM Ultima modificación: Abril 27, 2017, 09:53:16 PM por TOMJASP3R
Hola de nuevo underc0deanos, verán, he escrito un pequeño programa en C++ para buscar una linea de texto en un archivo .txt, lo que hace basicamente es leer línea por línea hasta encontrar la que pedí.

El programa  funciona, lo probé un par de veces y hace lo que quiero. El problema está cuando quiero buscar una línea en archivos grandes. Tengo un log de 5 millones de líneas (casi 700MB) Y pues el programa lleva más de una hora corriendo y, no termina de leer el archivo o encontrar mi petición.

¿Hay alguna forma de mejorar el código para que realice la busqueda de forma más rápida?

Adjunto el code que escribí:

Código: cpp
#include <iostream>
#include <conio.h>
#include <fstream>
using namespace std;

int main(){

cout<<"GO?"<<endl;
getch();

ifstream archivo("log.txt");

char linea[128];
long contador=0;

if(archivo.fail()){
cout<<"ERROR // NOT FOUND"<<endl;
}

else{
while(!archivo.eof()){

archivo.getline(linea,sizeof(linea));

if(linea[0]=='s' && linea[1]=='k' && linea[2]=='u'){
cout<<linea<<endl;
break;
}

}
}
getch();
return 0;
}


De antemano, muchas gracias!
\x11\x12\x13

pregunta
la variable char es de 128 caracteres de 0 a 128 contando el final y inicio de array buscas una cadena de texto celda por celda.
soy mas newe que tu no esoty familiarisado con la libreria fstream, la variable tipo long ¿la usas para guardar cada linea del carchivo?
,¿con el if dentro del while no estas leyendo cada celda en vez de cada frase ??

La variable char de 128 almacenaba una línea de texto con el 'getline'. Y si, con el if dentro del while buscaba celda por celda lo almacenado en la variable char.
De todas maneras esto ya lo resolví :D El problema estaba en que algunas líneas exedían la memoria asignada para la variable de tipo caracter. Aumenté el tamaño del array y quedó. No muy eficiente pero funcionó.
\x11\x12\x13

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
La variable char de 128 almacenaba una línea de texto con el 'getline'. Y si, con el if dentro del while buscaba celda por celda lo almacenado en la variable char.
De todas maneras esto ya lo resolví :D El problema estaba en que algunas líneas exedían la memoria asignada para la variable de tipo caracter. Aumenté el tamaño del array y quedó. No muy eficiente pero funcionó.

Puedes primero leer tan solo la primera letra y comprobar si es la que buscas, de la forma que lo tienes hace 3 comparaciones, si la primera no es una s no te hace falta saber si las siguientes son iguales y otra forma es fijarte en como es el log.txt, tal vez tenga algún tipo de patrón que te permita saltarte lineas inutiles y crear un bucle más complejo que sea más óptimo.

Saludos,
RollthBuen hacker mejor No tienes permitido ver los links. Registrarse o Entrar a mi cuenta/No tienes permitido ver los links. Registrarse o Entrar a mi cuenta