首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >C++读取txt的随机行?

C++读取txt的随机行?
EN

Stack Overflow用户
提问于 2011-06-29 01:12:37
回答 4查看 5.1K关注 0票数 7

我正在运行C++代码,我需要从txt文件导入数据。文本文件包含10,000行。每行包含n列二进制数据。

代码必须循环100,000次,每次它必须随机地从txt文件中选择一行,并将列中的二进制值分配给一些变量。

编写这段代码最有效的方法是什么?我应该先将文件加载到内存中,还是应该随机打开一个随机的行号?

如何在C++中实现这一点?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-06-29 01:16:50

要随机访问文本文件中的一行,所有行都需要具有相同的字节长度。如果你没有,你需要循环,直到你到达正确的行。由于这对于如此多的访问来说会相当慢,所以最好将它加载到std::strings的std::vector中,每个条目是一行(这很容易用std::getline完成)。或者,因为您希望从不同的列赋值,所以可以将std::vector与您自己的结构一起使用,如下所示

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct MyValues{
  double d;
  int i;
  // whatever you have / need
};

std::vector<MyValues> vec;

这可能比一直解析代码行更好。

使用std::vector,您可以获得随机访问权限,并且只需在整个文件中循环一次。

票数 3
EN

Stack Overflow用户

发布于 2011-06-29 02:57:29

10K行是一个非常小的文件。比方说,如果每行有100个字符,它将占用1MB的RAM。

将其加载到vector中,并以您想要的方式访问它。

票数 1
EN

Stack Overflow用户

发布于 2011-06-29 01:23:14

也许不是最有效的,但你可以试试这个:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int main() {
    //use ifstream to read
    ifstream in("yourfile.txt");

    //string to store the line
    string line = "";

    //random number generator
    srand(time(NULL));

    for(int i = 0; i < 100000; i++) {
        in.seekg(rand() % 10000);
        in>>line;
        //do what you want with the line here...
    }
}

我现在太懒了,但你需要确保检查你的ifstream是否有文件结束、索引越界等错误……

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6514774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文