我有一个文本文件,如下所示:
100 50 20 90
4.07498 0.074984
37.1704 28.1704
20.3999 14.3999
48.627 35.627 ....
我需要编辑此文件,以便除第一行第3项外,所有内容都保持不变。输出应该如下所示:
100 50 19 90
4.07498 0.074984
37.1704 28.1704
20.3999 14.3999
48.627 35.627
....
我怎么能用c ++做呢?有谁能够帮我?
谢谢, 晃
答案 0 :(得分:1)
#include <stdio.h>
int main()
{
FILE *pFile;
pFile = fopen("example.txt", "r+");
fseek(pFile, 7, SEEK_SET);
fputs("19", pFile);
fclose(pFile);
return 0;
}
编辑:以上当然主要是个玩笑。真正的方法是读取第一行,将其拆分为多个部分,更改所需的数字,写出来,然后跟随所有其余行。如果我们知道文件在第一行包含四个整数(浮点数?),那么这样就足够了:
#include <fstream>
#include <iostream>
using namespace std;
int main ()
{
ifstream in("in.txt");
ofstream out("out.txt");
float v1, v2, v3, v4;
in >> v1 >> v2 >> v3 >> v4;
v3 = 19.1234; // <- Do whatever you need to here.
out << v1 << " " << v2 << " " << v3 << " " << v4;
out << in.rdbuf();
out.close();
in.close();
return 0;
}
答案 1 :(得分:1)
只要结果与原始长度相同(或更短,并且您不介意添加空格来覆盖差异),这很容易:寻找您想要进行修改的位置,编写新数据,你已经完成了:
#include <fstream>
#include <ios>
int main() {
std::fstream file("yourfile.txt", std::ios::in | std::ios::out);
file.seekp(7);
file << "19";
return 0;
}
如果您要编写的数据不适合您要保留的其他内容,则需要重新编写文件的其余部分,通常是从旧文件复制到新文件,修改在整个过程中需要的数据。
编辑:类似这样的事情:
#include <fstream>
#include <ios>
#include <iterator>
#include <vector>
int main() {
std::vector<double> data;
std::fstream file("yourfile.txt", std::ios::in | std::ios::out);
std::copy(std::istream_iterator<double>(file),
std::istream_iterator<double>(),
std::back_inserter(data));
file.clear();
file.seekp(0);
data[2] = 19.98;
std::copy(data.begin(), data.end(), std::ostream_iterator<double>(file, " "));
return 0;
}
这有一些你可能不想要的效果 - 特别是,就目前而言,它会摧毁原始可能具有的任何“线”导向结构,并简单地将结果写为一条长线。如果你想避免这种情况,你可以(例如)一次读一行,转换行中的数字(例如,然后将其放入字符串流中,然后将其作为双精度读出),修改它们,放入结果返回一个字符串,并在末尾写出一行“\ n”。
答案 2 :(得分:0)
您可以使用std :: wfstream。
#include <fstream>
using namespace std;
int main() {
wfstream file(L"example.txt", std::ios::in | std::ios::out);
std::wstring first, second, third; // The extraction operator stops on whitespace
file >> first >> second >> third;
third = L"Whatever I really, really, want!";
file << first << second << third;
file.flush(); // Commit to OS buffers or HDD right away.
}
我可能搞砸了插入操作符的使用。但是,您可以参考MSDN了解使用wfstream的精确程度。我绝对建议不要使用任何C解决方案,所有的字符串操作功能都真的很糟糕。