Как удалить или удалить определенные данные из текстового файла?
В настоящее время я работаю над программой на C++ для добавления / удаления / обновления типа свойства. И я изо всех сил пытаюсь добавить функцию "удалить". Как мне ввести код, чтобы, например, когда я ввожу определенную информацию (такую как идентификатор), а другая информация этого идентификатора (имя арендатора, имя арендодателя и т. Д.) Будет удалена / удалена из этого текстового файла. Любые ответы будут оценены, заранее спасибо.
#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
#define INITIAL_STORAGE 80
using namespace std;
struct info
{
string List_ID;
string Landlord_name;
string Tenant_name;
string Property_Add;
string Property_type;
string Start_date;
string End_date;
string Rental_price;
string Payment_stat;
string Property_stat;
};
info I[INITIAL_STORAGE];
//Function Prototypes
void display(info I[]);
void add(void);
void choice_cont(void);
int main()
{
ifstream in_file("Info.txt");
if (!in_file) //check for error
cout << "Error opening file\n";
else
{
//READ FIRST ID
for (int number = 0; number< INITIAL_STORAGE; number++)
{
getline(in_file, I[number].List_ID);
getline(in_file, I[number].Landlord_name);
getline(in_file, I[number].Tenant_name);
getline(in_file, I[number].Property_type);
getline(in_file, I[number].Property_Add);
getline(in_file, I[number].Start_date);
getline(in_file, I[number].End_date);
getline(in_file, I[number].Rental_price);
getline(in_file, I[number].Payment_stat);
getline(in_file, I[number].Property_stat);
}
in_file.close();
cout << "------------------------------------------------------------------------------------------------------------------------\n" << endl;
cout << "\tMAIN MENU\n" << endl;
cout << "Please enter 1 to add property record.\n";
cout << "Please enter 2 to delete property record.\n";
cout << "Please enter 3 to edit or update record.\n";
cout << "Please enter 4 to display list.\n";
cout << "Please enter 5 to exit program.\n";
cout << "------------------------------------------------------------------------------------------------------------------------\n" << endl;
cout << "Please enter your option = ";
int option;
cin >> option;
switch (option)
{
case 1:
add();
choice_cont();
break;
case 2:
cout << "DELETE" << endl;
break;
case 3:
cout << "EDIT" << endl;
break;
case 4:
display(I);
choice_cont();
break;
case 5:
cout << "Exit" << endl;
break;
default:
cout << "Invalid" << endl;
}
}
return 0;
}
// Display the information in a list //
void display(info I[])
{
cout << "------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n";
cout << setw(16) << "Listing ID";
cout << setw(16) << "Landlord Name";
cout << setw(16) << "Tenant Name";
cout << setw(15) << "Property Type";
cout << setw(69) << "Property Address" << " ";
cout << setw(12) << "Start Date";
cout << setw(12) << "End Date";
cout << setw(15) << "Rental Price";
cout << setw(17) << "Payment Status";
cout << setw(17) << "Property Status" << endl;
cout << "------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n";
cout << endl;
for (int number = 0; number < INITIAL_STORAGE; number++)
{
cout << setw(16) << I[number].List_ID;
cout << setw(16) << I[number].Landlord_name;
cout << setw(16) << I[number].Tenant_name;
cout << setw(15) << I[number].Property_type;
cout << setw(69)<< I[number].Property_Add << " ";
cout << setw(12) << I[number].Start_date;
cout << setw(12) << I[number].End_date;
cout << setw(12) << I[number].Rental_price;
cout << setw(17) << I[number].Payment_stat;
cout << setw(14) << I[number].Property_stat << endl;
cout << "\n";
}
cout << "------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n";
}
void add(void)
{
info I;
cin.ignore();
cout << "PLease enter your ID :";
getline(cin, I.List_ID);
cin.ignore();
cout << "PLease enter your Landlord Name :";
getline(cin, I.Landlord_name);
cin.ignore();
cout << "Please enter your Tenant Name :";
getline(cin, I.Tenant_name);
cin.ignore();
cout << "Please enter your Property Type :";
getline(cin, I.Property_type);
cin.ignore();
cout << "Please enter your Property Address :";
getline(cin, I.Property_Add);
cin.ignore();
cout << "Please enter your Start Date : ";
getline(cin, I.Start_date);
cin.ignore();
cout << "Pleas eneter your End Date :";
getline(cin, I.End_date);
cin.ignore();
cout << "Please enter your Rental Price :";
getline(cin, I.Rental_price);
cin.ignore();
cout << "PLease enter your Payment status (Pending / Succesful) :";
getline(cin, I.Payment_stat);
cin.ignore();
cout << "Please enter your Property Status (Occupied / Vacant) :";
getline(cin, I.Property_stat);
ofstream out_file;
out_file.open("Info.txt", ios::app);
out_file << I.List_ID << endl;
out_file << I.Landlord_name << endl;
out_file << I.Tenant_name << endl;
out_file << I.Property_type << endl;
out_file << I.Property_Add << endl;
out_file << I.Start_date << endl;
out_file << I.End_date << endl;
out_file << I.Rental_price << endl;
out_file << I.Payment_stat << endl;
out_file << I.Property_stat << endl;
out_file.close();
}
void choice_cont(void)
{
loop1:
int choice;
cout << "Do you want to continue ?" << endl;
cout << "Press 1 to continue" << endl;
cout << "Press 2 to exit" << endl;
cout << "" << endl;
cout << "Enter your choice: ";
cin >> choice;
if (choice == 1)
{
system("cls");
main();
}
else
if (choice == 2)
{
cout << "" << endl;
cout << "Thank you for using!" << endl;
exit(0);
}
else
{
cout << "Invalid choice. Please choose again!" << endl;
goto loop1;
}
}
1 ответ
Самый простой вариант - прочитать файл в память и проанализировать его в некоторую обычную структуру, с которой вы можете работать, а затем удалить то, что нужно удалить. Затем запишите все обратно в новый файл и замените старый файл новым.