gpt4 book ai didi

c++ - 按列更新文件

转载 作者:太空宇宙 更新时间:2023-11-04 11:45:56 24 4
gpt4 key购买 nike

我正在阅读一个大文件 f1:10,000 行和 47,000 列。我想做的是转置 f1 并保存到 f2

为了解决这个问题,我做了以下事情:

  • 第 1 步:逐行阅读 f1
  • 第 2 步:将行写入 f2,这是我想按列而不是行更新 f2 的问题。

下图说明了我想做什么,所以我读取第 1 行并将其写入文件 2,然后我读取第 2 行并将其写入 f2 (按列而不是按行)

问题:如何按列而非行写入新文件。

这是我到目前为止的位置:

int main()
{

int size = A.weightedKeys.size();
ifstream file("f1.txt");
ofstream fout("f2.txt");
float x;
for (size_t i = 0; i < size; i++)
{
vector<float> v;
for (size_t j = 0; j < A.names.size(); j++)
{
file >> x;
v.push_back(x);

}
//Each time that i have a new vector i want to add it by column to f2 not by rows
for(size_t k = 0; k < v.size();k++ )
{
fout << v[k]<< endl;
}
v.clear();

}
fout.close();
}

enter image description here

最佳答案

一个文件实际上只不过是一个由连续字节组成的大数组,所以就存储而言,没有“行”或“列”的概念。我们只是说新行在 '\n' 之后开始。

不幸的是,这也意味着您不能以列优先格式写入文件,因为您不能将数据插入文件中间。

我能想到的两个选项:

1) 将整个输入文件加载到内存中,然后以转置方式将其写出(您的用例约为 2GB,这应该没问题)。

2) 读取一次输入文件,将每行的开头(使用 tellg)存储在一个 vector 中,然后通过遍历该 vector (对值调用 seekg)创建新文件,然后读取和写入您的输出文件,同时更新 vector 中的位置。

关于c++ - 按列更新文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19840579/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com