новая строка — C ++ получить размер (в байтах) EOL

Я читаю текстовый файл ASCII. Он определяется размером каждого поля в байтах. Например. Каждая строка состоит из 10 байтов для некоторой строки, 8 байтов для значения с плавающей запятой, 5 байтов для целого числа и так далее.

Моя проблема заключается в чтении символа новой строки, который имеет переменный размер в зависимости от операционной системы (обычно 2 байта для Windows и 1 байт для Linux).

Как я могу получить размер символа EOL в C ++?

Например, в Python я могу сделать:

len(os.linesep)

8

Решение

Достойный времени способ сделать это — прочитать строчку.

Теперь последний символ должен быть \n, Сними это. Затем посмотрите на предыдущего персонажа. Это будет либо \r или что-то другое. Если это \rРаздень это.

Для текстовых файлов Windows [ascii] других возможностей нет.

Это работает, даже если файл смешан (например, некоторые строки \r\n а некоторые просто \n).

Вы можете предварительно сделать это в несколько строк, просто чтобы убедиться, что вы не имеете дело с чем-то странным.

После этого вы теперь знаете, чего ожидать от большей части файла. Но метод стриптиз является общим надежным способом. В Windows вы можете импортировать файл из Unix (или наоборот).

1

Другие решения

Я не уверен, что перевод происходит там, где вы думаете. Посмотрите на следующий код:

ostringstream buf;
buf<< std::endl;
string s = buf.str();
int i = strlen(s.c_str());

После этого, работая в Windows, я == 1. Таким образом, определение конца строки в std — 1 символ. Как прокомментировали другие, это символ «\ n».

0

По вопросам рекламы [email protected]