Работа над программой, для которой задан список, подобный разделенному "," и помещением содержимого в вектор.
Test.txt содержит:
"45001524", "МОЧИ МОРОЖЕНОЕ КРЕМ", "LI", "19022128593", "GT Japan, Inc.", "2017-11-15 19:19:38 "," 2017-11-15 19:19:38 "," ИНГРЕДИЕНТЫ МОРОЖЕНОГО: МОЛОКО, КРЕМ, САХАР, КЛУБНИКА (КЛУБНИКА, САХАР), ТВЕРДЫЕ КУКУРУЗНЫЕ СИРОПЫ, МОЛОЧКО, КОЖА,Природный аромат, гуаровая смола, моно и диглицериды, свекольный сок и порошок свеклы (для цвета), целлюлозная камедь, камедь из плодов бобов, каррагенан. Ингредиенты для покрытия: сахар, вода, рисовая мука, бетон, витаминFOR COLOR), DUSTED WITH CORN & POTATO STARCH "
Функция readFile передается этому test.txt, уже открываясь, и пытается импортировать каждую разделенную", "строку в структуру8 типов строк.Имя Структуры itemType.
int itemNumber - это число.
void readFile( ifstream& inFile, vector<itemType>& item, int& itemNumber)
{
string currentLine;
int indexDef = 0;
while(getline(inFile, currentLine) && itemNumber < MAX_DB_SIZE){
indexDef = 0;
getQuotedString(currentLine, indexDef, item[itemNumber].NDBNumber);
getQuotedString(currentLine, indexDef, item[itemNumber].longName);
getQuotedString(currentLine, indexDef, item[itemNumber].dataSource);
getQuotedString(currentLine, indexDef, item[itemNumber].upc);
getQuotedString(currentLine, indexDef, item[itemNumber].manufacturer);
getQuotedString(currentLine, indexDef, item[itemNumber].dataModified);
getQuotedString(currentLine, indexDef, item[itemNumber].dataAvailable);
getQuotedString(currentLine, indexDef, item[itemNumber].ingredients);
}
}
bool getQuotedString( string& line, int& index, string& subString)
{
int endIndex;
//Start at 1st ' " '
endIndex = index;
//Find the next ' " '
index = line.find('"', index+1);
//subString = the characters between the first ' " ' and the second ' " '
subString = line.substr(endIndex+1, index-endIndex-1);
cout << subString << endl;
//Move the second ' " ' over 2, passing over the comma and setting it on the next "
index = index+2;
}
Я использую cout << subString
для тестирования.
Он выводит все идеально, как яхочу, но после последнего вывода выдает ошибку
terminate called after throwing an instance of 'std::out_of_range' what(): basic_string::substr: __pos (which is 1) > this->size() (which is 0)
Aborted (core dumped)
Я не могу на всю жизнь понять это: \ Я думаю, что мой индекс переполняет длину файла, но я не уверен, как это исправить.