Как удалить или удалить определенные данные из текстового файла?

В настоящее время я работаю над программой на 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 ответ

Самый простой вариант - прочитать файл в память и проанализировать его в некоторую обычную структуру, с которой вы можете работать, а затем удалить то, что нужно удалить. Затем запишите все обратно в новый файл и замените старый файл новым.

Другие вопросы по тегам