Top.Mail.Ru
Ответы

Вопрос по программированию на C++. Как из файла считать данные в поля структуры?

У меня есть файл "goods.txt" со списком товаров, например "Burger 50\n Rice 30\n Cheese 10\n" и есть поток ifstream rff("goods.txt") и есть структура struct CookedGoods {

int cookedBurgers;
int cookedCheese;
int cookedRice;
};

Как лучше будет считывать данные из файла в переменные отвечающие за количество приготовленных продуктов? Я пробовал перебором, например rff >> s; затем rff >> cookedBurgers;
Т.е. по порядку считывает до пробела в определённые переменные.

Как лучше сделать считывания из файла, чтобы проверять какую позицию мы берём (например мы хотим в какой-то момент считать из файла только количество риса) и взять из файла количество риса, т.е. только Rice и 30?

Была идея всё из файла считать в string::buf, затем с помощью функции поиска подстроки найти "Rice", а потом как-то начиная с позиции последнего символа "e+пробел" до след. пробела считать число, парсировать в int...

Но выглядит как какой-то велосипед. Как сделать это лучше и проще, помогите, пожалуйста.

По дате
По рейтингу
Аватар пользователя
Новичок

Ну вообще вы правильно мыслите: читаете, пока не встретите требуемый заголовок, потом считываете следующую порцию, если надо - отсекаете все, что не цифра меньше 0x30 или больше 0x39, но это не обязательно, atoi сама это сделает, и вуаля...
Или, если вам надо считать неизвестный заранее набор полей - считывать сразу пару ключ - значение, каждый считанный ключ искать в списке требуемых, и, если найден - обрабатывать значение. А если нужно постоянно обращаться к данным - сразу все в память считать и работать в памяти - обращение к диску не дешевая процедура...

Аватар пользователя
Оракул

Я бы запихал структуру(вектор структур) в вариант, сериализовал бы и залил в файл, обратно так же десериализацией... А все операции проводить в ОП.
Если вам нужно совсем минимизировать обращение к диску, то имеет смысл воспользоваться базой данных, чтобы не изобретать велосипед. Самая простенькая sqlite - разобраться более менее что как можно за полдня...