如何使用fstream从txt文件中获取数据
how to fetch data from a txt file using fstream
我正在构建一个小型应用程序。在此我将一些数据保存在一个 txt 文件中。我需要编辑特定行和列中的值。我写了一段代码来转到特定行并获取值,但我已经尝试了几乎所有方法来获取特定列并编辑该值。
1000 400 120 110 800 110 150 500 0 1000
1000 400 90 150 800 120 150 600 0 1000
1000 400 80 60 **800** 132 150 700 0 1000
1000 400 120 60 800 123 150 200 0 1000
1000 400 111 80 800 143 150 700 0 1000
1000 400 30 90 800 155 150 500 0 1000
例如,我编辑了突出显示的值,这是最好的方法。我无法粘贴我的整个代码,因为它很长。
这是我可以转到特定行的地方
fstream& GotoLine(int num) {
infile.seekg(std::ios::beg);
for (int i = 0; i < num - 1; ++i) {
infile.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
return infile;
}
如有任何帮助,我将不胜感激。
假设您的文件格式为固定列大小,我的建议是:
- 准备
struct { size_t pos; size_t width}
的数组或向量来定义字段
- 以
ios::in | ios::out
模式打开文件
- 使用您的
GotoLine
函数一次一行地读取文件,直到您要处理的行
- 注意 fstream 中的索引
tellg
- 读取字符数组中有趣的行,其大小大于该行 - 这里我将使用 64 来足够大 -
istream::getline
- 由于您已将行读取为普通数组,因此您可以重写一个字段的字符
- 返回行首
seekp
- 将该行写回文件
这不是编辑文本文件的一般方法。它只在这里起作用,因为 因为你有固定大小的字段 编辑后的行与原始行的大小完全相同,所以它可以在原地重写。但是从不在一般情况下使用它。
我正在构建一个小型应用程序。在此我将一些数据保存在一个 txt 文件中。我需要编辑特定行和列中的值。我写了一段代码来转到特定行并获取值,但我已经尝试了几乎所有方法来获取特定列并编辑该值。
1000 400 120 110 800 110 150 500 0 1000 1000 400 90 150 800 120 150 600 0 1000 1000 400 80 60 **800** 132 150 700 0 1000 1000 400 120 60 800 123 150 200 0 1000 1000 400 111 80 800 143 150 700 0 1000 1000 400 30 90 800 155 150 500 0 1000
例如,我编辑了突出显示的值,这是最好的方法。我无法粘贴我的整个代码,因为它很长。 这是我可以转到特定行的地方
fstream& GotoLine(int num) {
infile.seekg(std::ios::beg);
for (int i = 0; i < num - 1; ++i) {
infile.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
return infile;
}
如有任何帮助,我将不胜感激。
假设您的文件格式为固定列大小,我的建议是:
- 准备
struct { size_t pos; size_t width}
的数组或向量来定义字段 - 以
ios::in | ios::out
模式打开文件 - 使用您的
GotoLine
函数一次一行地读取文件,直到您要处理的行 - 注意 fstream 中的索引
tellg
- 读取字符数组中有趣的行,其大小大于该行 - 这里我将使用 64 来足够大 -
istream::getline
- 由于您已将行读取为普通数组,因此您可以重写一个字段的字符
- 返回行首
seekp
- 将该行写回文件
这不是编辑文本文件的一般方法。它只在这里起作用,因为 因为你有固定大小的字段 编辑后的行与原始行的大小完全相同,所以它可以在原地重写。但是从不在一般情况下使用它。