использование getline для получения нескольких строк из файла и ввода их в разные массивы

0

Я пытаюсь сделать простой 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].

  • 1
    Первое: while (!infile.eof()) неверно . Вы никогда не проверяете единственное извлечение в этом коде на достоверность, прежде чем предположить, что оно работает
Теги:
arrays
getline

1 ответ

1
Лучший ответ
  1. Не ставьте eof() в условие while. Это неправильно! Проверьте: Почему iostream :: eof внутри условия цикла считается неправильным? , Чтобы выработать, вы можете изменить

    while (!infile.eof()) {
        count++;
        getline(infile,datefield);
        ... 
    

    в

    while (getline(infile,datefield)) {
        count++;
        ... 
    
  2. Вы должны быть очень осторожны на шаге чтения данных. Для ",.00,0,.00,", так как в нем нет пробелов, таким образом >> price[i] >> volume[i] попытается прочитать все это содержимое по price[i]. Содержимое не будет прочитано в volume[i]. Чтобы разобраться, вы можете сначала прочитать эту часть в string а затем прочитать данные из нее путем разделения. Или замените все ',' на пробелы, а затем поместите в std::istringstream, тогда вы можете правильно использовать >> price[i] >> volume[i].

  • 0
    Благодарю. У меня это работает сейчас.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню