【发布时间】:2014-09-10 09:51:15
【问题描述】:
我正在处理一些文本文件,我需要阅读其中的所有行,并且需要访问这些行中的字符串。我使用了如下方法(假设每行有 4 个字符串):
string word1 , word2, word3, line;
while( getline( inputFile,line )){
stringstream row(line);
row>>word1>>word2>>word3>>word4;
}
但是,结果非常低效,我的程序运行得不是很快。我该如何改进方法?提前致谢!
【问题讨论】:
-
那里有一堆解决方案:stackoverflow.com/questions/1120140/…
-
不要用getline/stringstream读取行,直接使用istream
-
“但是,结果非常低效”——当我质疑时不要生气。每行有四个“字符串”和一个缓冲流,代码将接近 epsilon 以提高速度。我有一个 100 万行的 txt 文件,每行包含四个随机字符串,长度从 5 到 30 个字符不等,上面的代码将在大约 3 秒内枚举整个内容(在使用 3 年的 macbook air 笔记本电脑上,不少)。您的问题可能与您不共享的数据有关,或者不在此代码中。发布的代码的发布版本应该翻阅文件。
-
这段代码只是一个例子,这就是为什么我说“假设每行有 4 个字符串”。另外,这不是整个程序。正如标题所总结的,我想学习在 .txt 行中读取字符串的最有效方法。因此我只写了执行读取操作的部分
-
我怀疑这不是整个程序,这在某种程度上是我的观点。 没有下面的答案(仍然,无论如何)做那些发布的代码行所做的事情。 (禁止换行、平台换行处理等)。你能根据复杂的
strtok()+memcpy()算法编写一百行代码来绕过行缓冲区和字缓冲区的分配和复制吗?当然。最后值得吗?问唐纳德·高德纳。那就是see this。 Mats 对复杂性和性能之间的权衡进行了精彩的剖析。
标签: c++ file-io inputstream stringstream