按列更新文件

时间:2013-11-07 15:58:12

标签: c++ file

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

为了解决这个问题,我所做的是以下内容:

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

下面的图片说明了我想要做的事情,所以我读了第1行并将其写入文件2,然后我读了第2行并将其写入f2 (按行而不是按行) < / p>

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

这是我到目前为止的地方:

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

1 个答案:

答案 0 :(得分:1)

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

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

我能想到的两个选择:

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

2)读取输入文件一次,将每行的开头(使用tellg)存储在向量中,然后通过迭代向量(在值上调用seekg)创建新文件,然后读取和写入输出文件,同时更新向量中的位置。