Проверка конца строки и пробела

0

Я читаю файл из 5 двойников в строке через цикл for и сохраняю их в вектор структур, а иногда на линии меньше 5 удвоений. Файл выглядит примерно так:

111.111 222.222 333.333 444.444 555.555

666,666

777,777 (пробел) 888,888 999,999

struct temp_struct{
    double d1,d2,d3,d4,d5
};
vector<temp_struct> data;
for(int i=0;i<3;i++)
    File>>data.at(i).d1>>data.at(i).d2>>data.at(i).d3>>data.at(i).d4>>data.at(i).d5;

Есть ли способ проверить пустое пространство после 666.666 и между 777.777 и 888.888.

Поскольку сейчас я читаю его, после 666.666 он перейдет к следующей строке файла и прочитает 777.777 и 888.888 999.999, чтобы структура выглядела как data.at(1).d1 = 666.666 data.at(1).d2 = 777,777 data.at(1).d3 = 888.888 и data.at(1).d4 = 999.999, где я предпочитаю

data.at(1).d1=666.666, break because of end of line 
data.at(2).d1=777.777, data.at(2).d2=0, data.at(3).d3=888.8888

Я программирую VS2010 C++

Теги:
file-io

1 ответ

1

Обычный способ разбора текстового текста состоит в использовании std::getline() в сочетании с std::istringstream, например:

for (std::string line; std::getline(in, line); ) {
    std::istringstream lin(line);
    // parse the line using 'line'
}

Однако есть и другие подходы. Например, можно настроить поток, чтобы не учитывать пробел в новой строке: таким образом, пытаясь считывать числа при появлении новой строки, попытка считывания значения не удалась! Способ изменить то, что считается пропущенным, - это установить пользовательский объект std::locale с пользовательской версией std::ctype<char>.

Ещё вопросы

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