Я пытаюсь сделать простой getline
из filestream, а затем сохранить различные входные данные в разные массивы.
Входной файл выглядит примерно так.
Курс времени продажи, цена ($), объем, стоимость ($), состояние 10/10/2013 04:57:27 PM, 5.81,5000,29050.00, LT XT 10/10/2014 04:48:05, 5,81,62728,364449,68, SX XT 10/10/2013 04:10:33 PM,.00,0,.00,
Обратите внимание, что первые две строки являются избыточными и их следует игнорировать. Все данные должны храниться в соответствующих массивах, таких как time [i], price [i].
string datefield;
int count = 0;
string date[5000];
float pricefield;
float price [5000];
int volume[5000];
float value[5000];
string condition[5000];
int i = 0;
while (!infile.eof()) {
count++;
getline(infile,datefield);
while (count >= 2) {
getline(infile,date[i], ',');
infile >> price[i] >> volume[i];
i++;
break;
}
}
Проблема здесь в том, что входные данные не поступают в volume[i].
Не ставьте eof()
в условие while
. Это неправильно! Проверьте: Почему iostream :: eof внутри условия цикла считается неправильным? , Чтобы выработать, вы можете изменить
while (!infile.eof()) {
count++;
getline(infile,datefield);
...
в
while (getline(infile,datefield)) {
count++;
...
Вы должны быть очень осторожны на шаге чтения данных. Для ",.00,0,.00,"
, так как в нем нет пробелов, таким образом >> price[i] >> volume[i]
попытается прочитать все это содержимое по price[i]
. Содержимое не будет прочитано в volume[i]
. Чтобы разобраться, вы можете сначала прочитать эту часть в string
а затем прочитать данные из нее путем разделения. Или замените все ','
на пробелы, а затем поместите в std::istringstream
, тогда вы можете правильно использовать >> price[i] >> volume[i]
.
while (!infile.eof())
неверно . Вы никогда не проверяете единственное извлечение в этом коде на достоверность, прежде чем предположить, что оно работает