我想解析一个看起来像这样的文件(类似FASTA的文本格式):
>InfoHeader
"Some text sequence that has a line break after every 80 characters"
>InfoHeader
"Some text sequence that has a line break after every 80 characters"
...
Run Code Online (Sandbox Code Playgroud)
例如:
>gi|31563518|ref|NP_852610.1| microtubule-associated proteins 1A/1B light chain 3A isoform b [Homo sapiens]
MKMRFFSSPCGKAAVDPADRCKEVQQIRDQHPSKIPVIIERYKGEKQLPVLDKTKFLVPDHVNMSELVKI
IRRRLQLNPTQAFFLLVNQHSMVSVSTPIADIYEQEKDEDGFLYMVYASQETFGFIRENE
Run Code Online (Sandbox Code Playgroud)
我用boost :: spirit为此编写了一个解析器.解析器正确地存储标题行和下面的文本序列,std::vector< std::pair< string, string >>但是对于较大的文件(对于100MB文件为17秒)需要很长时间.作为比较,我编写了一个没有boost :: spirit(只是STL函数)的程序,只需复制一个100MB文件的每一行std::vector.整个过程不到一秒钟.用于比较的"程序"不符合目的,但我不认为解析器应该花更长的时间......
我知道有很多其他的FASTA解析器,但我很好奇为什么我的代码很慢.
.hpp文件:
#include <boost/filesystem/path.hpp>
namespace fs = boost::filesystem;
class FastaReader {
public:
typedef std::vector< std::pair<std::string, std::string> > fastaVector;
private:
fastaVector fV;
fs::path file;
public:
FastaReader(const …Run Code Online (Sandbox Code Playgroud)