Форум программистов, компьютерный форум CyberForum.ru

чтение из файла, в котором на перенос строки отводится один символ - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
artyom.stv
Сообщений: n/a
09.05.2009, 03:41     чтение из файла, в котором на перенос строки отводится один символ #1
Здравствуйте.

При обработке файлов результатов неких измерений наткнулся на такую проблему:
На перенос строки отводится один байт, как в *nix-системах, а не два байта, - как в маздае. пишу я как раз под маздаем.
Использую ifstream для чтения из файла. Есть причины, по которым использовать С-шный доступ к файлам мне не выгодно.
Вызов tellg для потока выдаёт значение (положение в файле), которое было бы, если бы в файле для переноса использовалось бы два байта.

Т.е. когда на 51 строке реальная позиция в файле, например 900, tellg выдаёт 950. При переходе
Код
fin.seekg(fin.tellg(), ios::beg)
позиция чтения не должна меняться, а она меняется. То же самое и при вызове
Код
fin.seekg(shft, ios::cur)
при shft неравном нулю, - позиция смещается не на shft, а на shft+50, например.

Подскажите, пожалуйста, если кто-нибудь знает, как сказать ifstream-у, что в переносе строки нужно учитывать один байт, как оно и есть на самом деле для конкретного файла.

Добавлено через 13 часов 55 минут 25 секунд
Спасибо всем, кто смотрел и пытался решить проблему.

Как вариант это решается с помощью istreambuf_iterator:
Код
ifstream fin( fileName );
ifstreambuf_iterator it( fin ), end;
......
find( it, end, '\n' );
fin.seekg( 1, ios::cur );
Наверняка есть и более вразумительные способы, но этого вполне хватет для большинства случаев.
Если таким образом проходить ВСЕ символы переноса, не используя getline, то tellg будет выдавать правильное значение.

Тему можно закрыть.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2009, 03:41     чтение из файла, в котором на перенос строки отводится один символ
Посмотрите здесь:

Найти слово, один и тот же символ в котором встречается максимальное число раз (в рамках всей строки) C++
C++ Найти слово, один и тот же символ в котором встречается максимальное число раз
Найти слово, один и тот же символ в котором встречается максимальное число раз (в рамках всей строки). C++
Создать функцию, которая на вход получает строку символов и один символ, функция печатает те слова строки, в которых встречается этот символ. C++
Найти символ первой строки, который первым не совпал с одним из символов второй строки. Вывести слово, в которое входит этот символ C++
Разработка программного модуля вставки строки заданной длины, содержащую хотя бы один перенос, в текстовый файл C++
C++ strupr (сделать заглавным один символ строки)
Чтение и запись из файла в файл - символ в файле повторяется дважды C++
C++ Вывод из файла слова, в котором заданный символ встречается больше всех остальных
C++ Как, прочитав из файла один символ, выявить факт окончания файла
Заменить все символы строки на один заданный символ C++
Каждый символ строки заменить на следующий за ним, а последний символ строки заменяеть первым C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 18:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru