我正在阅读一个大文件 f1 :10,000行和47,000列。我想要做的是转换 f1 并保存到 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();
}
答案 0 :(得分:1)
文件实际上只是一个连续字节的大数组,因此就存储而言,没有“行”或“列”的概念。我们只是说在'\ n'之后开始一个新行。
不幸的是,这也意味着您无法以列主格式写入文件,因为您无法将数据插入文件的中间。
我能想到的两个选择:
1)将整个输入文件加载到内存中,然后以转置的方式写出来(对于你的用例,大约2GB,这应该没问题。)
2)读取输入文件一次,将每行的开头(使用tellg)存储在向量中,然后通过迭代向量(在值上调用seekg)创建新文件,然后读取和写入输出文件,同时更新向量中的位置。