Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2010, 10:20   #1
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию перемещение по файлу

Подскажите, как можно перемещаться по файлу, причем именно по строкам !
пробовал fseek, но он перемещается посимвольно, а мне нужно найти i строку в файле и считать её

причем перемещаться по файлу, не считывая содержимое( fgets не подойдет)
NiCola999 вне форума Ответить с цитированием
Старый 17.04.2010, 10:43   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Код:
int i = 1;
while( i < n && !feof(file) ) { // n - нужная строка
     if(fgetc(file) == '\n')
         i++;
}
netrino вне форума Ответить с цитированием
Старый 17.04.2010, 10:49   #3
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

меня интересует доступ к i той строке файла, не считывая данные. Наверно такое невозможно, т.к не узнаешь где стоит символ \n не считывая файл...

ну а как ты думаешь, если в файле будет 100000 строк, и надо считать i тую строку fgetс быстро будет работать?

Последний раз редактировалось NiCola999; 17.04.2010 в 10:53.
NiCola999 вне форума Ответить с цитированием
Старый 17.04.2010, 11:54   #4
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

В общем, это во многом зависит от текущей нагрузки на жёсткий диск. В лучшем случае это будет довольно быстро, но всё же не мгновенно ) у меня чтение 900000 строк, каждая по 100 символов, занимало от 9 до 20 секунд. Быстрее всё же(при чём довольно значительно) будет использовать выше упомянутую fgets и читать в буфер N раз. Ещё лучше - читать файл порциями в некий буфер и глядеть в нём нужную строку, это несколько сложнее, но должно быть быстрее. Также можете почитать про отображаемые в память файлы(Memory-mapped files), по сути это работает как чтение в буфер, но более оптимизировано и удобно.
netrino вне форума Ответить с цитированием
Старый 17.04.2010, 13:09   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А fscanf разве не может сам считать до конца строки?
по-моему у него есть такая возможность.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.04.2010, 13:25   #6
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

но ведь все эти ф-ии всё равно работают по принципу fgetc )
NiCola999 вне форума Ответить с цитированием
Старый 17.04.2010, 13:38   #7
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А fscanf разве не может сам считать до конца строки?
по-моему у него есть такая возможность.
fscanf читает до первого пробельного символа, потому использовать его для чтения всей строки не получится, да и нет необходимости - это не его предназначение
netrino вне форума Ответить с цитированием
Старый 17.04.2010, 13:39   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Возможно...
Мастерам Си виднее
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перемещение файлов jkpro Общие вопросы Delphi 4 05.10.2009 21:28
перемещение в форме bosston Общие вопросы Delphi 2 17.09.2009 10:47
Перемещение TImage Романнн Общие вопросы Delphi 1 27.10.2008 18:38
Перемещение кнопки? &RiU Общие вопросы Delphi 1 28.05.2008 18:13
Перемещение файлов Nasya Microsoft Office Excel 2 13.10.2007 20:37