Я новичок в C ++ и у меня возникли некоторые недопонимания по поводу чтения / записи файлов ...
У меня есть файл данных .txt, который содержит информацию об улицах, т.е. улице, домашнем номере и количестве квартир
У меня есть задача прочитать данные из файла, добавить новый, удалить ненужные и сделать некоторые расчеты о количестве квартир на определенной улице
Для хранения данных при работе программы я создал вектор структуры:
struct homeAdressBook {
std::string street;
char homeNumber[255];
int flats;
};
std::vector<homeAdressBook> HAB;
Код программы ниже:
std::fstream document;
document.open("name.txt");
if (!document) {
std::ofstream document;
document.open("name.txt");
}
if (!document)
std::cout << "File open error" << std::endl;
else {
//Here (while loop) I want to read data from a file and add to my vector of struct for further usage, it partly works somehow but this point is unclear for me
while (!document.eof()) {
HAB.push_back(homeAdressBook());
std::getline(document, HAB[i].street);
document >> HAB[i].street;
document >> HAB[i].homeNumber;
document >> HAB[i].flats;
i++;
}
document.close();
do {
switch (menu()) {
case 0: {
document.close();
exit = false;
break;
}
//Here (case 1) I add new data and write it in file, here I have no problems at the moment
case 1: {
document.open("name.txt", std::ios::app);
HAB.push_back(homeAdressBook());
std::cin.ignore();
std::cout << "Enter the address: ";
std::getline(std::cin, HAB[i].street);
std::cout << "Enter home number: ";
std::cin.getline(HAB[i].homeNumber, 255);
std::cout << "Enter number of flats: ";
std::cin >> HAB[i].flats;
document << HAB[i].street << HAB[i].homeNumber << HAB[i].flats << std::endl;
document.close();
i++;
break;
}
//Here (case 2) I want to read data from a file, it reads data except first line of data
case 2: {
int total = i;
std::cout << std::setw(20) << "Street" << std::setw(20) << "Home Number" << std::setw(20) << "Number of flats" << std::endl;
document.open("name.txt", std::ios::in);
for (int j = 0; j < total; j++) {
std::cout << std::setw(20) << HAB[j].street << std::setw(20) << HAB[j].homeNumber << std::setw(20) << HAB[j].flats << std::endl;
}
document.close();
break;
}
//Here (case 3) data should be deleted from a file if necessary
case 3: {
document.open("name.txt", std::ios::out | std::ios::in);
int strDelete = 0;
std::cout << "0. Exit to main menu" << std::endl;
for (i = 0; i < HAB.size(); i++) {
std::cout << i + 1 << ". " << HAB[i].street << std::endl;
}
std::cout << "\nType number of street to delete: ";
std::cin >> strDelete;
if (strDelete)
i--;
else break;
HAB.erase(HAB.begin() + (strDelete - 1));
document.close();
break;
}
}
} while (exit);
}
system("pause");
return 0;
}
Данные в .txt файле записываются так:
aaa street 10 50
aaa street 10 45
bbb street 1 10
ccc street 1 12
ccc street 1/10 25
Каждая строка в файле .txt принадлежит [i] -s вектору элементов структуры
Я не могу понять, как правильно добавлять данные из файла .txt к моему вектору структур во время работы программы (название улицы может содержать до 5 или 6 слов и как программа может отделить, является ли это название улицы или это домашний номер или количество квартир)