Ho una serie di file di testo di grandi dimensioni (10s - 100s di migliaia di righe) che voglio analizzare riga per riga. L'idea è di verificare se la linea ha una parola/carattere/frase specifica e, per ora, registrare su un file secondario, se lo fa.C++ leggi testo riga per riga, risparmio velocità/efficienza necessari
Il codice che ho usato finora è:
ifstream infile1("c:/test/test.txt");
while (getline(infile1, line)) {
if (line.empty()) continue;
if (line.find("mystring") != std::string::npos) {
outfile1 << line << '\n';
}
}
La fine obiettivo è quello di scrivere queste righe a un database. Il mio pensiero era di scriverli prima nel file e poi importare il file.
Il problema che sto affrontando è il tempo necessario per completare l'operazione. Sto cercando di ridurre al minimo il tempo il più lontano possibile, quindi qualsiasi suggerimento sul risparmio di tempo sullo scenario di lettura/scrittura sopra sarebbe molto gradito. Mi scuso se qualcosa è ovvio, ho appena iniziato a passare in C++.
Grazie
EDIT
Devo dire che sto usando VS2015
EDIT 2
Quindi questa era la mia colpa muto, quando si passa alla versione e cambiando il tipo di architettura ho notato aumenti di velocità notevoli. Grazie a tutti per avermi indicato in quella direzione. Sto anche guardando le cose di mmap e questo si sta rivelando utile. Grazie ragazzi!
Hai compilato con le ottimizzazioni? –
my 2 cents ... La lettura di ogni riga da un file ridurrà la velocità. Prova ad usare le chiamate di sistema (spero tu stia usando linux) .1.use mmap (o) 2. usa fstat o stat per conoscere la dimensione del file. Adattare dinamicamente la memoria per quella dimensione.la lettura dell'intero file in un colpo, poi fai il processo. –
Cosa ne pensi di memorizzare le linee corrispondenti (vettore, forse) e scrivere nel database quando il vettore raggiunge una certa dimensione (e quando arrivi alla fine dei dati di input)? –