2016-06-25 5 views
-2

В C++ я получаю файл csv матрицы формы float,float,float,\n или float float float \n для каждой строки соответственно.getline игнорирует ' n' - getline с двумя разделителями

Если я прочитал строки файла мудро с использованием getline конца строки разделителя \n всегда читаются как хорошо, т.е. getline(csv_file, csv_line, '\n') или getline(csv_file, csv_line) дает в качестве вывода 1,2,3,\n и не 1,2,3, как я ожидаю, что это. Как я могу отказаться от этого \n?

Кроме того, как я могу различать эти две версии ввода и хранить конкретный разделитель ' ' или ','?

+0

Возможно ли, что маркер конца строки фактически является '\ r \ n', а не просто' \ n', поэтому '\ r' не отбрасывается, но ваша платформа по-прежнему рассматривает его как Разрыв строки? –

+0

Нет, это просто «\ n» в конце каждой строки. – SemtexB

+0

Это работает для меня. – Shiro

ответ

0

Во-первых, обычно не рекомендуется передавать данные в разных форматах в каждой строке.

Но если это так, вы можете прочитать всю строку в строке, используя this getline без разделителя, а затем проанализировать строку с использованием регулярных выражений или простых строковых функций. Вы можете определить, в каком формате он находится, пытаясь найти символ , в строке. Если вы используете find, вам нужно разбить по запятой, иначе - пробелом.

Также обратите внимание на класс stringstream (link). Это просто для таких случаев, когда вам нужно вырезать некоторые значения из уже прочитанных строк (а не только одного типа).