У меня есть файл с именем 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)
{
}
для того, чтобы восстановить данные учетной записи, но я застрял с поиском информации из файла , Любая помощь приветствуется!
Самый простой способ - полностью прочитать ваш файл и создать «std :: vector», а затем работать с элементами этого вектора и записать его целиком. –
@KenWhite Не совсем это обман. –
Я понимаю, что это не то, что вы просите, но почему это в текстовом файле, а не, например. sqlite db? –