![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Есть необходимость создания проги для редактирования очень больших текстовых файлов (имеются ввиду Log файлы от разных, применяемых у меня програм). Размеры файлов составляют от сотен мегабайт до нескольких гигабайт. Естественно, что ни о какой загрузке такого файла целиком не идёт речь - это завесит любую машину, и тормознёт любой сервер. Естественное решение - это организация загрузки файла по мере необходимости - кусками, более или менее удобоваримых размеров. Однако реализация такой штуки по мере осмысления представляется мне не столь простой как на первый взгляд. Например, я подгружаю куски по 64Kb, как мне выделить кусок текста и скопировать в буфер большего размера?
Господа, кто-нибудь делал что-либо подобное? Поделитесь опытом? Может у кого есть какой-нибудь компонент или класс для работы с такими файлами? -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Song |
|
|||
![]() Sysman.ru ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1095 Регистрация: 2.6.2002 Репутация: 2 Всего: 4 |
Ничего создавать не надо. Всё уже сделали за нас: CreateFileMapping()
-------------------- Прежде чем сказать "Невозможно", подумай, прав ли ты |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
А можно пример какой-никакой?
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Song |
|
|||
|
Unregistered |
Можно, завтра.
|
|||
|
||||
| Song |
|
|||
![]() Sysman.ru ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1095 Регистрация: 2.6.2002 Репутация: 2 Всего: 4 |
Vit, тут я посмотрел, готового у меня нет отрывка
Давай сделаем творческий проект, если тебя это конечно реально интересует. Что пока надо: 1. Наследник от TMemo 2. Перехват движения по мемо. Идея такая: нужно отследить тот момент когда нужно подгрузить в мемо очередной кусочек текста, т.к. в единый момент времени мы будем отображать в мемо только столько текста сколько убирается в его клиентскую область. Когда произойдёт движение вниз или вверх мы подгружаем очередной кадр с соответственным сдвигом. Вообщем пока так. А я соображу с проецированным файлом. Кстати нам нужно использовать CreateFileMapping()+MapViewOfFile() -------------------- Прежде чем сказать "Невозможно", подумай, прав ли ты |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Ты знаешь, наверное в этом проекте сложна не столько реализация, сколько надо понять как оно будет работать. Подгрузить следующий кусок не проблема, проблема работы на стыках кусков - например выделение текста для копирования , если выделение находится на стыке кусков или, что ещё хуже, выделение больше одного куска... А также алгоритм вставки текста - если напрямую решать, то после каждой вставленной буквы надо перезаписывать огромный файл, значит надо где-то буфферизировать данные, а затем делать сохранение одним махом, причём опять-таки буфферизированные данные могут выскочить за предел текущего блока, затем при чтении изменённого блока вновь, он должен читаться с учётом изменений. В общем работка ещё та!
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| neutrino |
|
||||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Надо сделать так, чтобы куски "пересекались". Какие-нибудь 3Кб чтобы были обшие у каждои' пары кусков.
Можно запомнить границы загруженного в память куска, и записать поверх него, при этом немного фрагментирoвать файл в физическом смысле. -------------------- The truth comes from within ... Покойся с миром, Vit |
||||
|
|||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |