问题描述
我正在编写一个程序来搜索文件中的名称,然后覆盖该名称之后的一些数字。我目前的方法是从fstream
读取直到找到名称,然后使用相同的fstream
覆盖之后的数字。但是,光标位置似乎错误。这是一个测试程序:
#include <fstream>
#include <iostream>
int main() {
std::string name;
std::fstream file("test.txt",std::fstream::in | std::fstream::out);
while (file >> name) {
if (name == "Jason") {
file << "A";
break;
}
}
file.close();
}
当test.txt仅包含一行时,输出似乎正确; “ A”紧跟在“ Jason”之后
test.txt:
Jason -1395354120 0
结果:
JasonA-1395354120 0
但是,当有多行时,将'A'写入数字的中间:
test.txt:
Jason -1395354120 0
Bob 1266020048 0
Jason -1395354120 0
Bob 1266020048 0
Jason -1395354120 0
Bob 1266020048 0
结果:
Jason -139A354120 0
Bob 1266020048 0
Jason -1395354120 0
Bob 1266020048 0
Jason -1395354120 0
Bob 1266020048 0
我希望它总是在名字之后立即开始写。我该如何解决?
编辑:如果我将file << "A";
替换为std::cout << file.tellg() << " " << file.tellp() << std::endl;
,则表明写入和读取位置均位于37,这是第二个示例中A出现的位置。我对此感到困惑,因为我认为>>运算符应该在“ Jason”(应该为31)之后停止读取。
解决方法
您可以使用seekg()函数以从以下位置开始:
exports.handler = async (event) => {
// TODO implement
event.c_type_\/_customer_type = "Customer Type";
const response = {
statusCode: 200,body: event,};
return response;
};
,
Jason,我尝试了您的代码,它给了我不同的结果:
test.txt:
Jason -1395354120 0
结果:
Jason -1395354120 0
A
test.txt:
Jason -139A354120 0
Bob 1266020048 0
Jason -1395354120 0
Bob 1266020048 0
Jason -1395354120 0
Bob 1266020048 0
结果:
Jason -139A354120 0
Bob 1266020048 0
Jason -1395354120 0
Bob 1266020048 0
Jason -1395354120 0
Bob 1266020048 0
A
换句话说,代码没有找到“ Jason”,而只是在末尾添加了“ A”。也许您可以尝试在条件语句中包含file << "A";
命令,以查看程序的工作方式
编辑:这对我有用:
while (name != "Jason")
{
if (!(file >> name))
{
break;
}
}