|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
10.12.2008, 00:00 | #21 |
Бредовый
Форумчанин
Регистрация: 15.11.2008
Сообщений: 285
|
Тысяча извинений за ту ерунду что наговорил, видать сайт где я такое видел левый какой-то. Пол дня пролазил в нете но так ту страницу и не нашел.
Чем точнее и проще задан вопрос, тем проще на него получить точный ответ.
|
10.12.2008, 07:35 | #22 | |
Форумчанин
Регистрация: 25.03.2007
Сообщений: 166
|
Цитата:
|
|
11.12.2008, 00:35 | #23 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
Если Вы это понимаете, то дальше просто... что тут особо рассказывать... Объявляете f:file of LongInt; OffS : longInt; begin Assign(f,'index.itx'); Rewrite(f); потом загружаете исходный файл хотя бы в тот же TS : StringList (TS.LoadFromFile('биг.txt') далее: OffS := 0; for i:=1 to TS.Count-1 do begin Write(f,OffS); OffS := OffS + Length(TS.Strings[i]) + 2; {два байта - это на перевод строки. Обязательно посмотреть HEX вьювером и убедится, что строки в вашем текстовом файле разделяются именно двумя байтами (обычно это 0x0D, 0x0A или CR LN или ВК ПС или \r\n - это всё одно и то же, просто кто к чему привык ;-))))} end; CloseFile(f); всё. создание индекса закончено. дальше. для использования. читать индексный файл (либо в память в динамический массив, либо seek'акть прямо в индексном файле на нужную строку. Читаем смещение в переменную (например, в LineOffs) Дальше в текстовом файлике: Seek(FText, LineOffs) всё. мы стоим на начале нужной строки! p.s. кстати, я бы _очень_ рекомендовал для чтения текстового файла использовать компонент TStreamFile там есть метод Seek... |
|
11.12.2008, 10:51 | #24 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Вроде работает..вот за пару минут накатал
Код:
|
11.12.2008, 14:56 | #25 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
BOBAH13, слов нет. Программка Отличная!
Супер! обязательно сохраню её себе в копилочку! Вот только тут обсуждение идёт того, что из больших файлов быстро читать не очень получается... Например, Ваша функция у меня из текстового файла размером 820 МБ (22000000 строк) строчку в конце файла (седьмую от конца, например) читает ~42 секунды. А что, если после этого (допустим кому-то), надо прочитать 100 строку, потом третью, потом 1000000, .... ) - затраты времени потребуются просто колоссальные.. :-( Ещё раз повторю - без конкретных условия, что есть в наличии, что за файл, какие там переводы строк, размер, количество строк, изменяется ли он, и что требуется получить (постановка задачи, требования по времени исполнения) - тут можно дискутировать до бесконечности... |
11.12.2008, 15:14 | #26 | |
Участник клуба
Регистрация: 12.08.2008
Сообщений: 1,977
|
Нашелся человек, который вернул всех все таки к вопросу старттопика:
Цитата:
Но все таки обсуждение получилось занятным и о-очень полезным.Хоть целую тему выделяй - "Работа с текстовыми файлами".
И не сомневайся даже ... отдых - кайф, работа - лажа!
|
|
11.12.2008, 15:44 | #27 | |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Цитата:
автору: если вопрос в силе могу реализовать на легке то что вы хотите... и тут дело в том что буфер можно увеличить на сколько угодно... и в таком разе заходов в blockread меньше будет. И все-таки если файл постоянен и очень редко меняется то способ Serge_Bliznykov подойдет в полне. |
|
11.12.2008, 16:15 | #28 |
Участник клуба
Регистрация: 12.08.2008
Сообщений: 1,977
|
Из Delphi 7:
Или для Код:
И не сомневайся даже ... отдых - кайф, работа - лажа!
Последний раз редактировалось DeKot; 11.12.2008 в 16:19. |
11.12.2008, 16:25 | #29 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Смешно... а как тут говорят размер 100 мб даже.. ну представьте весь этот текст впихнуть в TStringList вы себе представляите обработку загрузки 100 МБ в память ? P.s. вы чтот не много не учли
|
11.12.2008, 16:29 | #30 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
DeKot, Вы отстаёте от темы.. Это же метод абстрактного класса TString (или его потомка - TStringList)
Но чтобы получить строчку по номеру туда файл сначала надо загрузить через TStringList.LoadFromFile(...) - а это долго... мне кажется, что мы по кругу ходим.. По крайней мере, мне, в настоящий момент, по существу обсуждаемого вопроса добавить уже нечего... ;-) |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Объясните строчку, пожалуйста | Manya | Общие вопросы C/C++ | 2 | 20.11.2008 16:02 |
Рразъясните строчку. | Amen | Помощь студентам | 11 | 30.08.2008 02:45 |
Как с поиощью hiew вставить в файл строчку, "раздвинуть" файл и вставить туда строчку? | barand | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 2 | 28.06.2008 10:58 |
DBLookupComboBox на первую строчку | Inbox | БД в Delphi | 7 | 29.10.2007 13:26 |
HELP! Как мне вытащить текст из файла? | kl45gp | Общие вопросы Delphi | 12 | 17.08.2007 22:26 |