Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Пропуск строк и вычисление их размера

26K
23 ноября 2009 года
Упырь
16 / / 23.12.2007
Здравтсвуйте, прошу помочь разобраться с ос ледующей проблемой. Читаю по строчно html файл, больших размеров до 150 Мб,так как в файлен присутствует информация которую можно пропускать, для ускорения процесса чтения и анализа файла необходима функция пропуска N-го количества строк, но для корректного отображения ProgressBar желательно и вычислить размер пропущенных строк. Впорос собственно следующий существует ли функция позволяющая сделать такой пропуск строк, число N всегда фиксировано.
P.s. подозреваю, что здесь поможет функция seek за счет какого-нибуддь хитрого использования. Спасибо.
3
23 ноября 2009 года
Green
4.8K / / 20.01.2000
Для того, чтоб пропустить строку, необходимо найти её конец.
При нахождении конца строки не составляет труда посчитать её длину.
Посчитав длину одной строки не сложно определить размер всех пропущенных строк.

Так в чем именно проблема?
26K
23 ноября 2009 года
Упырь
16 / / 23.12.2007
нахождение конца строки это вариант, но только если осуществляется не тем же самым ее чтением, тоесть если есть выигрыш производительности. Какой способ предлагаете вы???
3
23 ноября 2009 года
Green
4.8K / / 20.01.2000
Цитата: Упырь
нахождение конца строки это вариант, но только если осуществляется не тем же самым ее чтением, тоесть если есть выигрыш производительности. Какой способ предлагаете вы???


А другого варианта нахождения конца строки, кроме как её чтением (перебором её символов), нет. Ну если ты, конечно, заранее не получаешь её длину.

26K
24 ноября 2009 года
Упырь
16 / / 23.12.2007
мы уцепились за этот конец строки, но вопрос ведь стоит о N количестве строк, тоесть мне в принципе и не надо искать концы строк, все что мне надо найти позицию в файле начала блока пропускаемых данных и позицию конца блока пропускаемых данных, а также размер пропущенного блока или читаемого файла в позиции начала пропускаемого блока и в позиции кона пропускаемого блока. Знаю, что допустим в бейсике у объекта файл есть метод skipstring.
3
24 ноября 2009 года
Green
4.8K / / 20.01.2000
Цитата: Упырь
мы уцепились за этот конец строки, но вопрос ведь стоит о N количестве строк, тоесть мне в принципе и не надо искать концы строк, все что мне надо найти позицию в файле начала блока пропускаемых данных и позицию конца блока пропускаемых данных, а также размер пропущенного блока или читаемого файла в позиции начала пропускаемого блока и в позиции кона пропускаемого блока.


Ну и как ты собираешься их искать без поиска по символам?

Цитата: Упырь
Знаю, что допустим в бейсике у объекта файл есть метод skipstring.


Он тоже не используем черную магию, а перебирает символы.

26K
26 ноября 2009 года
Упырь
16 / / 23.12.2007
Хорошо тогда переформулирую фопрос, как можно ускорить работу данного цикла )):
for(int i = 0; i<14; i++)
{
char b[500];
curSize += file.readLine(b,sizeof(b));
}
1
26 ноября 2009 года
kot_
7.3K / / 20.01.2000
Не читать из файла в цикле.
3
26 ноября 2009 года
Green
4.8K / / 20.01.2000
Цитата: Упырь
Хорошо тогда переформулирую фопрос, как можно ускорить работу данного цикла )):
for(int i = 0; i<14; i++)
{
char b[500];
curSize += file.readLine(b,sizeof(b));
}


Если ты считаешь, что этот код пропускает определенное число строк, - ты ошибаешься.
Не факт что строка меньше 500 символов.

3
26 ноября 2009 года
Green
4.8K / / 20.01.2000
Цитата: kot_
Не читать из файла в цикле.


посимвольно

Цикл в общем случае, все равно, придется организовывать, только читать надо сразу блоками.

26K
26 ноября 2009 года
Упырь
16 / / 23.12.2007
У меня строки меньше 500 символов это факт. А вот на счет читать блоками я сегодня после работы поразмыслю, спасибо. Правильно я понимаю, что ускорение идет за счет меньшего обращения к жесткому диску?
7
26 ноября 2009 года
@pixo $oft
3.4K / / 20.09.2006
Правильно.Правда,на этот случай есть кэширование…но всё равно лучше читать немаленькими блоками
Можно ещё сделать отображение файла.Но это так,к слову
1
26 ноября 2009 года
kot_
7.3K / / 20.01.2000
Цитата: Упырь
У меня строки меньше 500 символов это факт. А вот на счет читать блоками я сегодня после работы поразмыслю, спасибо. Правильно я понимаю, что ускорение идет за счет меньшего обращения к жесткому диску?


Файловые операции одни из самых медленных - поэтому по возможности их количество необходимо сводить к минимуму - если критична скорость выполнения. Поэтому если речь идет о оптимизации по скорости - то оптимально читать блоками по размеру кластера (по крайней мере для файловых систем FAT/FAT32/NTFS) - а никак не строками. А если хочется строками - то не надо мучатся на счет скорости.

5.3K
27 ноября 2009 года
!Волк
95 / / 19.07.2006
Цитата: kot_
Файловые операции одни из самых медленных - поэтому по возможности их количество необходимо сводить к минимуму - если критична скорость выполнения. Поэтому если речь идет о оптимизации по скорости - то оптимально читать блоками по размеру кластера (по крайней мере для файловых систем FAT/FAT32/NTFS) - а никак не строками. А если хочется строками - то не надо мучатся на счет скорости.


Если файл кешируется операционной системой, разве имеет значение, буду ли я читать из файла с учетом размера кластера или просто буду читать большими блоками? Я предполагал, что имеет значение только количество вызовов системной функции, возвращающей блок данных, и все следует сводить к минимизации этих вызовов. Разве не так?

1
27 ноября 2009 года
kot_
7.3K / / 20.01.2000
Цитата: !Волк
Если файл кешируется операционной системой, разве имеет значение, буду ли я читать из файла с учетом размера кластера или просто буду читать большими блоками? Я предполагал, что имеет значение только количество вызовов системной функции, возвращающей блок данных, и все следует сводить к минимизации этих вызовов. Разве не так?


Я думаю, что существенного выигрыша может и не быть - по крайней мере если буфер действительно большой.
В реальном приложении на самом деле вы можете получить существенный выигрыш при первом обращении, можете не получить - тут пробуйте самостоятельно - дисковые операции зависят от многих факторов в ОС - но в большинстве файловых систем размер читаемых данных=равно размеру кластера.

26K
01 декабря 2009 года
Упырь
16 / / 23.12.2007
всем спасибо сделал.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог