Ich bin sehr neu in C++! Daher würde ich es wirklich schätzen, wenn Sie es in Betracht ziehen und so einfach wie möglich antworten. Ich muss Fasta-Datei mit> 40000 Sequenzen (in der Nähe von 500 MB) analysieren und ID und Sequenzlänge in die neue Datei schreiben. Ich habe festgestellt, dass es in C++ sehr langsam geht und Python zu diesem Zweck viel schneller arbeitet. Aber ich muss lernen, wie ich es in C++ machen kann. Ich frage mich, gibt es irgendwelche Möglichkeiten, diesen Prozess für C++ zu befestigen?C++ lesen/schreiben große Dateien
Dies ist mein Code:
#include <iostream>
#include <fstream>
#include <string>
#include <time.h>
#include <stdio.h>
using namespace std;
int main() {
time_t start, end;
time(&start);
clock_t begin = clock();
ifstream file;
string line;
string id;
string content;
int len = 0;
int i = 0;
ofstream out;
file.open("contigs.fasta", ios::in);
out.open("output.txt", ios::out);
while (getline(file, line)) {
if (line[0] == '>') {
i++;
if (i != 1) {
//cout << id << "\n" << len << "\n" << content << endl;
//out.write(line.c_str(), line.size());
out << id << " : " << len << endl;
}
id = line;
len = 0;
content = "";
}
else
{
len += line.length();
content += line;
}
}
//cout << id << "\n" << len << "\n" << content << endl;
//out << id << " : " << len << endl;
cout << "Total number of sequences :" << i << "\n";
out.close();
time (&end);
double dif = difftime (end,start);
printf ("Elasped time is %.2lf seconds.", dif);
return 0;
}
Vielen Dank im Voraus!
Lesen Sie es in kleinen Stücken statt ganze Datei auf einmal zu lesen. Siehe http://stackoverflow.com/questions/20911584/how-to-read-a-file-in-multiple-chunks-until-eof-c – Oscar
'content + = line;' Das ist natürlich langsam. Speicher neu zuordnen, Inhalt kopieren, die neue Zeile anhängen, das braucht Zeit. Vielleicht möchten Sie diesen Ansatz noch einmal überdenken, wie Oscar sagte. –
'out << id <<": "<< len << endl;' 'endl' macht mehr als nur eine neue Zeile. Es spült auch den Puffer. Benutze es nicht, wenn du es nicht brauchst. Verwenden Sie einfach '\ n'. – Matt