Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с большими текстовыми файлами, Чтение, запись, поиск 
:(
    Опции темы
greenpc
Дата 18.2.2008, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 29.1.2007

Репутация: нет
Всего: нет



Stern87
а если попробовать так:
пришем в файл фиксированную длину строки, заведомо большую чем самая длинная
далее через seek бегаем по файлу
PM   Вверх
Poseidon
Дата 18.2.2008, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Цитата(greenpc @  18.2.2008,  13:45 Найти цитируемый пост)
далее через seek бегаем по файлу
Задолбешься бегать по тридцатимегабайтному текстовому файлу...



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Stern87
Дата 18.2.2008, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 27.11.2007
Где: Украина

Репутация: нет
Всего: нет



Цитата(Poseidon @  18.2.2008,  11:32 Найти цитируемый пост)
Можно увидеть обоснование этого?
Сокращенно "прихоть" не получилось smile
Можно. Программа уже n-й версии. И "структура" этих индекс-файлов не меняется уже очень долго. Люди пользуются разными версиями этой программы и они могут обменивать этими файлами, объединять их, или просто править в обыкновенном блокноте. Очень желательно, чтобы "структура" осталась такой же открытой и доступной.

Цитата(Alexeis @  18.2.2008,  11:43 Найти цитируемый пост)
Так я ж описал механизм. Скопируй сорс TStringList и переопредели выделение памяти строк инициализацию и т.д. короче все что понадобиться. Но память выделяй сам используя файл отображаемый в память. 
Звучит неплохо. Вот я и спросил: если ли уже что-то готовое, потому что найти неполучается((( ??

Цитата(Данкинг @  18.2.2008,  11:45 Найти цитируемый пост)
Я бы базу в Access хотя бы создал и с ней работал. Вот и альтернатива. 
Но это делает программу зависимой от Microsoft Office. А если программа работает на простеньком сервере в маленькой локальной сети? Ради её еще и Office ставить? Нет, спасибо за предложение, но альтернатива плохая.

Цитата(greenpc @  18.2.2008,  12:45 Найти цитируемый пост)
а если попробовать так:
пришем в файл фиксированную длину строки, заведомо большую чем самая длинная
далее через seek бегаем по файлу 
А как узнать какая может попаться самый большой HTTP-адрес? В принципе, по RTF это 4096 (поправьте, если я не прав). Но а как же тогда будут сохраняться POST или куки всякие??


Можно даже упростить главный вопрос сформулировав так: что вы будете предпринимать, если окажется, что некогда ваш механизм оперирования с текстовым файлом (посредством TStringList) будет слишком медлительным и использовать слишком много ОЗУ (увеличить которое сможет далеко не каждый ваш потенциальный пользователь), и изменить структуру того текстового файла вы не можете?
PM WWW ICQ Skype   Вверх
VICTAR
Дата 18.2.2008, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

Репутация: 37
Всего: 80



Stern87, ты хочешь и рыбку съесть и вырезано цензурой.
Выиграешь в скорости - потеряешь в памяти и наоборот.
PM MAIL   Вверх
Stern87
Дата 18.2.2008, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 27.11.2007
Где: Украина

Репутация: нет
Всего: нет



Цитата(VICTAR @  18.2.2008,  14:52 Найти цитируемый пост)
Stern87, ты хочешь и рыбку съесть и вырезано цензурой.
Выиграешь в скорости - потеряешь в памяти и наоборот. 
Да я уже скорость и не прошу. Мне просто нужно, чтобы ОЗУ не так кушало, а удобство было такое же как и работа с TStringList. Или, еще проще, навигация по строкам и добавление строки в конец. Вот и всё! Не так уж и много надо.
PM WWW ICQ Skype   Вверх
lukas
Дата 18.2.2008, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: 3
Всего: 15



вместо tstringlist использовать массив строк, если сравнить: поиск по массиву будет происходить раз в 5-10 быстрее чем по tstringlist, т.к. если нужно быстрота, то объекты в твоем случае лучше отбросить, только лишь на вызов TStringList.Items[i] тратиться в 10 раз больше времени чем на тот же массив arr[i]... Так что загоняй строки в массив, и работай с ним ... естественно используй динамические массивы...

Это сообщение отредактировал(а) lukas - 18.2.2008, 17:35


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
VICTAR
Дата 18.2.2008, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

Репутация: 37
Всего: 80



Цитата(Stern87 @  18.2.2008,  17:05 Найти цитируемый пост)
удобство было такое же как и работа с TStringList

Объясни в чем заключается удобство. Проще будет думать.

Добавлено через 10 минут и 46 секунд
Цитата(Stern87 @  18.2.2008,  11:01 Найти цитируемый пост)
Но TextFile, в свою очередь не может решить вопрос о работе с файлом как для записи строк (в конец)

Append

Цитата(Stern87 @  18.2.2008,  11:01 Найти цитируемый пост)
так и чтения всех строк

А вот это я не понял
PM MAIL   Вверх
Stern87
Дата 18.2.2008, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 27.11.2007
Где: Украина

Репутация: нет
Всего: нет



Цитата(VICTAR @  18.2.2008,  16:43 Найти цитируемый пост)
Объясни в чем заключается удобство. Проще будет думать.
Писал уже - можно легко добавить строку в конец, а также, можно обратиться к любой строчке.

Цитата(VICTAR @  18.2.2008,  16:43 Найти цитируемый пост)
Append
Он открывает текстовый файл для записи строк в конец. Читать им строки открытого файла, кажется, нельзя.

PM WWW ICQ Skype   Вверх
VICTAR
Дата 18.2.2008, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

Репутация: 37
Всего: 80



Цитата(Stern87 @  18.2.2008,  18:47 Найти цитируемый пост)
Он открывает текстовый файл для записи строк в конец.

Да, но что мешает Reset - прочитать - закрыть, Append - записать - закрыть. 
Или я что-то не понимаю?
PM MAIL   Вверх
Akella
Дата 18.2.2008, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Цитата(Stern87 @  18.2.2008,  11:01 Найти цитируемый пост)
Обычно файлы индексации весят от 200Мб, п

грузить 200 метров текста в память??? я бы тоже БД использовал

Добавлено через 7 минут и 49 секунд
Цитата(Данкинг @  18.2.2008,  12:45 Найти цитируемый пост)
Я бы базу в Access хотя бы создал и с ней работал. Вот и альтернатива.  

акцесс тормознутый

Добавлено через 9 минут и 46 секунд
Цитата(Stern87 @  18.2.2008,  15:45 Найти цитируемый пост)
Но это делает программу зависимой от Microsoft Office. А если программа работает на простеньком сервере в маленькой локальной сети? Ради её еще и Office ставить? Нет, спасибо за предложение, но альтернатива плохая.

firebird
PM MAIL   Вверх
aktuba
Дата 18.2.2008, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 16
Всего: 38



При таких жестких условиях я бы FileStream использовал. При более мягких:
Цитата(Akella @  18.2.2008,  19:59 Найти цитируемый пост)
firebird 




--------------------
user posted image
PM MAIL WWW Skype   Вверх
Akella
Дата 18.2.2008, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



так если использовать файлстрим, то нужно весь файл грузить в память?
а как искать инфу в тексте, если текст не загрузить в память? по одной строчке? типа загрузил одну, проверил, не то, выгрузил и т.д.
PM MAIL   Вверх
aktuba
Дата 19.2.2008, 01:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 16
Всего: 38



Цитата(Akella @  18.2.2008,  22:11 Найти цитируемый пост)
так если использовать файлстрим, то нужно весь файл грузить в память?
а как искать инфу в тексте, если текст не загрузить в память? по одной строчке? типа загрузил одну, проверил, не то, выгрузил и т.д. 

Скорее не целиком, а блоками...


--------------------
user posted image
PM MAIL WWW Skype   Вверх
mutex
Дата 19.2.2008, 03:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 17.10.2004

Репутация: нет
Всего: 3



Stern87
Запись текстового файла (то бишь Ваша строка) состоит из двух частей: ключ поиска - это URL-адрес поста, информация записи - текст поста юзера. Длина ключа поиска и длина информационной части записи являются переменными. Правильно понимаю условие задачи?

Мне кажется, что GreenPC предлагает хорошую идею: использовать Seek.

Только надо немного дополнить:
- надо преобразовать ключ поиска в 16-ный хэш, н-р, использовать SHA-1, который выдает 20 байтный хэш;
- в памяти хранить этот хэш и Integer-смещение записи от начала текстового файла; 
- итого: длина элемента динамического массива равна 24 байтам.

Тогда требование к памяти должно снизиться и Вы можете делать поиск хэша для ключа, введенного  юзером. 

Можно также отсортировать массив и применить бинарный поиск, или, в крайнем случае создать двоичное дерево вместо массива.



Это сообщение отредактировал(а) mutex - 19.2.2008, 03:42
PM MAIL   Вверх
aktuba
Дата 19.2.2008, 06:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 16
Всего: 38



mutex
Цитата(Stern87 @  18.2.2008,  16:45 Найти цитируемый пост)
Программа уже n-й версии. И "структура" этих индекс-файлов не меняется уже очень долго. Люди пользуются разными версиями этой программы и они могут обменивать этими файлами, объединять их, или просто править в обыкновенном блокноте. Очень желательно, чтобы "структура" осталась такой же открытой и доступной.




--------------------
user posted image
PM MAIL WWW Skype   Вверх
Страницы: (4) Все 1 [2] 3 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0922 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.