У меня есть файл .txt, который содержит список названия продукта, описание и количество.
Например, как:
100 Plus , Sports Drink , 12
Sprite , Citrus Drink , 5
Dutch Lady, Milk, 8
Я хочу присвоить эту информацию трем переменным, string name
, string description
, а также int quantity
Я пытался использовать что-то вроде while(product >> name >> description >> quantity)
, но он работает только в том случае, если он содержит только отдельные слова и без запятой, но не для строки с несколькими словами.
Это мой код
#include <string>
include <fstream>
include <iostream>
using namespace std;
int main()
{
string name, description;
int quantity;
fstream product("product.txt");
string c_name[5],c_description[5];
int c_quantity[5];
int i=0;
while(product >> name >> description >> quantity)
{
cout<<i<<" Name= "<<name<<", Description= "<< description <<" , Quantity= " <<quantity<<"\n";
c_name[i] = name;
c_description[i] = description;
c_quantity[i] = quantity;
i++;
}
cout<<"-------------------------------------------------------------------"<<endl<<endl;
for(i=0;i<5;i++) //to display the variables
{
cout<<i+1<<" "<<c_name[i]<<endl;
cout<<i+1<<" "<<c_description[i]<<endl;
cout<<i+1<<" "<<c_quantity[i]<<endl<<endl;
}
product.close();
return 0;
}
Могу ли я узнать, как я могу это сделать?
И если возможно, я бы хотел использовать только некоторые простые заголовочные файлы.
Большое спасибо.
Вы не можете использовать поток >>
оператор, потому что, как вы обнаружили, он останавливается на первый пробел.
Вам нужно читать по одной строке за раз
std::string line;
std::getline(product, line);
и искать запятые с std::string::find
и извлеките нужные вам части std::string::substr
,
Вы можете рассмотреть getline()
который позволяет использовать разделитель:
while ( getline(getline (product, name, ','), description, ',') >> quantity)
Просто имейте в виду, что вам может понадобиться удалить пробелы в начале description
а также name
, как >>
делал это раньше. В качестве альтернативы вы можете также добавить product.ignore(INT_MAX, '\n');
в конце вашего цикла цикла, чтобы убедиться, что последняя новая строка за количеством удаляется перед выполнением следующей строки getx.