![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
AxNe0 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 24.4.2006 Где: St. Petersburg Репутация: нет Всего: 5 |
Как можно прочесть первую строку открытого с помощью fopen файла?
![]() Это сообщение отредактировал(а) AxNe0 - 11.5.2006, 13:27 |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
AxNe0 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 24.4.2006 Где: St. Petersburg Репутация: нет Всего: 5 |
Romikgy, а если заранее длина строки неизвестна?
|
|||
|
||||
likehood |
|
|||
666 ![]() ![]() Профиль Группа: Участник Сообщений: 536 Регистрация: 21.12.2005 Репутация: 8 Всего: 24 |
Вторым параметром fgets задается максимальный размер строки, т.е. длина массива string. Эта длина должна быть заведомо больше самой длинной строки в файле.
|
|||
|
||||
gepard |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2477 Регистрация: 29.2.2004 Репутация: 2 Всего: 40 |
Значит её сначала надо посчитать
![]() Считываешь по байтам, когда встречаешь конец строки - обрываешь увелечение счётчика и получаешь длинну. -------------------- Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным! © Я, Берсерк, что значит - Неистовый. |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Таким образом, если в конце прочитанной строки отсутствует символ конца строки ('\n'), то это говорит: а) строка в файле длиннее, чем выделенный под нее буфер б) достигнут конец файла (это условие можно проверить с помощью feof(stream) ) Поэтому, чтобы прочитать строку любой длины из файла, надо: 1. выделить буфер s размером n=N знаков: s = (char*)malloc( n ); 2. объявить переменную переменной int d = 0; 3. прочитать в s + d не более (n-d) символов 4. d += strlen(s); 5. ecли feof(fd) != 0, то переход на п. 7 6. если s[ d - 1] != '\n' 6.1. n += N; 6.2. увеличить объем буфера: s = (char*)realloc( s, n ) 6.3. перейти на п. 3 7. если feof(fd) != 0, то d = 0 8. переход на п. 3 9. конец. В пункте 7 имеем полностью прочитанную строку. Все, кроме последней быть может, будут заканчиваться на символ конца строки '\n'. |
|||
|
||||
nworm |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 502 Регистрация: 22.10.2005 Репутация: 1 Всего: 8 |
Если пошли такие проблемы, то можно просто писать свою функцию (чтобы от длины строки не зависела). А за основу взять код функции fgets из стандартной библиотеки.
Это сообщение отредактировал(а) nworm - 11.5.2006, 17:43 |
|||
|
||||
AxNe0 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 24.4.2006 Где: St. Petersburg Репутация: нет Всего: 5 |
Написал:
Не работает. Почему? ![]() |
|||
|
||||
Dithur |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 25.4.2006 Репутация: нет Всего: нет |
Функция подсчёта длины списка, думаю можно идею использовать для подсчёта длины первой строки файла, если чуть-чуть подправить:
Честно признаюсь код сдул месяц назад с кого-то задачника, по-моему с Тарасова, может пригодится ![]() |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
AxNe0, если неизвестно , тогда счтитывай по символьно , до перевода строки
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
AxNe0 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 24.4.2006 Где: St. Petersburg Репутация: нет Всего: 5 |
Кто-нибудь знает, где можно найти более-менее понятное описание функций из <string.h>? До использовал ObjectPascal, а тут функции немного по-другому называются...
![]() |
|||
|
||||
bsa |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Добавлено @ 11:25
http://www.google.com/search?hs=en7&hl...1%D0%BA&lr= |
||||
|
|||||
AxNe0 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 24.4.2006 Где: St. Petersburg Репутация: нет Всего: 5 |
Всем спасибо! Учел.
Результат функции должен отображаться на CStatic, но отображается вместо латинских букв такая штука: Как можно поправить ситуацию? ![]() |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
AxNe0 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 24.4.2006 Где: St. Petersburg Репутация: нет Всего: 5 |
Вот весь код, относящийся к CStatic
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |