如何接收、修改和替换文本文件中的一行
How to take in, modify and replace a line in a text file?
我有一个名为accounts.txt的文件,其格式如下:
firstName lastName | cardNum | pin | balance | status | dateCreated
--------------------------------------------------------------------
John Smith | 8947 | 1234 | 0 | open | 2016-03-29.12:30:01
Mike Casey | 9322 | 1111 | 0 | open | 2016-03-29.12:30:11
我希望能够循环浏览文件并更改特定条目。例如,如果我想转到cardNum=9322并更改余额,我必须搜索第三个竖线('|')并输入数字,直到第四个竖线为止('|]),编辑数字并重新输出,对吗?
问题是,我是c++的新手,我不知道如何定位第三个("|")并在它重新输出后编辑它。我知道我必须读入整个文件,然后输出到一个新文件。这就是我创建新帐户的方式:
void AccountHandler::createAccount() //Account creation function
{
//create account in format: { First Last | cardNum | pin | balance | status | accInfo }
struct bankAccount newacc;
ofstream accounts;
string tempPin1, tempPin2;
if (!accounts.is_open())
{
accounts.open("accounts.txt", ios::app);
}
std::cout << "Thanks for choosing to bank with ATM406, let's get started!" << std::endl;
std::cout << "Please enter your name (First Last): ";
//SET NAME ON ACCOUNT
getline (cin, newacc.name);
//SET SECURITY PIN ON ACCOUNT
for (;;)
{
std::cout << "nPlease enter a four-digit pin to secure your account: ";
getline (cin, tempPin1);
std::cout << "nPlease re-enter your four-digit pin for verification: ";
getline (cin, tempPin2);
if (tempPin1 != tempPin2) //Pins did not match
{
std::cout << "The pins did not match!" << std::endl;
}
else //Pins match
{
newacc.pin = tempPin1;
break;
}
}
//ASSIGN A RANDOM FOUR-DIGIT CARD NUMBER FROM 1000-9999
srand(time(NULL));
ostringstream convert;
convert << rand() % 9000 + 1000;
newacc.cardNum = convert.str();
//ASSIGN A STARTING BALANCE OF 0$
newacc.balance = "0";
//CREATE DATE OF ACCOUNT CREATION
newacc.accInfo = currentDateTime();
//SET STATUS OF ACCOUNT
newacc.LOCKED = false;
string status;
if (newacc.LOCKED == false)
status = "open";
//PUSH INFO TO TEXT FILE
accounts << newacc.name << " | " << newacc.cardNum << " | " << newacc.pin << " | " << newacc.balance << " | "
<< status << " | " << newacc.accInfo << std::endl;
//CLOSE FILE
accounts.close();
}
我希望创建一个函数,如:
struct bankAccount AccountHandler::getAccount(string cardNum)
{
}
为了检索帐户信息,但我一直在从文件中查找信息。感谢您的帮助!
考虑如何使用easyLambda库实现这一点。
ezl::rise(
ezl::readFile<string, array<int, 3>, array<string, 2>>(fileName)
.colSeparator("|"))
.map<2>([](array<int,3> cardPinBal) { // 2nd column selected for lambda
if (cardPinBal[0] == 9322) cardPinBal[2] = newBal;
return cardPinBal;
}).colsTransform().dump("updatedInfo.txt")
.run();
这里,readFile读取数据文件,类型用于每行的列。它使用readLine
来读取行,并在colSeparators上对每行进行字符串拆分。使用boost lexical cast
将字符串转换为类型,但是stoi
和族可以同样好地工作。映射中的函数应用于每一行(对于所选列,此处为第二列)。ColsTransform确保列在不重新排序的情况下使用返回值进行更新。
您可以考虑将库用于常规数据处理任务。
相关文章:
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 如何使代码打印文本文件中的第一行?
- 如何格式化我的文本文件以使其不会一遍又一遍地重复同一行?
- 逐字读取文本文件中的每一行并转换为 int(无限循环或崩溃?
- 将字符串存储到文件下一行的变量中
- 为什么这个.c文件只有一行"../xx/xx.c"?
- 比较两个没有一行共同点的大文件
- 如何在c ++中以一行(水平)打印两个文件的数据?如给定的.这两种形式来自两个不同的文本文件
- 到达分隔符时跳到文本文件的下一行
- 从文本文件中读取一行并将其存储在 C++ 中的 2D 矢量中
- 从文本文件中随机选取一行
- 在获取从文件到矢量的每一行之后,数字将被更改或销毁
- 从文件中的一行读取特定数据-C++
- 从文本文件中的每一行读取数字,并计算数字重复的次数
- 为什么这一行不输出我的文本文件?
- 从文件读取并在一行中写入 cout
- 如何有效地读取C 中的最后一行文件
- 将一行文件读入对象中的两个变量