![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сохранить закачанные HTML-страницы?
Pcrepair © (2012-12-20 19:13:00)Добрый день. Есть следующая ситуация:
- загрузчик страниц(на базе TidHTTP и TThread) получает список УРЛ и начинает параллельную закачку страниц
- число закачек ограничено 10 (пока)
- закачка страниц происходит асинхронно, каждая в своем потоке, результат закачки переносится в поле типа property Html: string read FHtml write FHtml;
type
TLoader = class(TThread)
private
FUrl:string;
FHtml:string;
{ Private declarations }
protected
procedure Execute; override;
function LoadHtmlPage(const Url:string):string;
public
property Url: string read FUrl write FUrl;
property Html: string read FHtml write FHtml;
end;
- методом CS, на текущий момент, данные передаются в МЕМО, просто для наглядности. и там накапливаются
--------------------------
Необходим накопитель со следующими параметрами:
- доступность из всех процедур. типа глобальная переменная
- два поля: одно для УРЛ, второе для кода HTML-страницы. может и три, третье - для хранения идентификатора, чтоб не было коллизий
- работающее по принципу стека(тогда третье поле не нужно)
- без использования записи на ЖД в файл. все должно хранится в ОЗУ
++++++++++++++++++++++++++++
Внимание! Вопрос:
на основе чего можно сделать такой накопитель:
- что то слепить из операторов и типов(Списки, строки и все такое). никто не знает ссылок на что то похожее?
- использовать компоненты из палитры, там много чего с DB в названии, но с этими компонентами не знаком совершенно, может кто подскажет, какой компонент подойдет для накопителя?
- использовать ИнтерБейс, или еще какую внешнюю БД. что крайне нежелательно, во всяком случае на текущем этапе.
Pcrepair (2012-12-21 17:48:00) [1]DVM
да нет, ничего такого не надо
нужно просто сохранить закачанные страницы в паре с УРЛ для последующей обработки(определения рейтинга). сейчас (в однопоточном режиме закачки страниц) они просто идут дальше на обработку, в многопоточном режиме закачки нужно их накопить потом все вместе отправить на определение рейтинга
DVM (2012-12-21 14:13:00) [2]Чтоб ему отследить ссылки ему еще как минимум надо решить проблему приведения относительных путей и кривых абсолютных к единому каноническому виду. Та еще задачка.
Inovet (2012-12-20 21:47:00) [3]> [10] Pcrepair © (20.12.12 20:53)
> TStack
Шаблон? Пример в хелпе есть.
Только... Судя по другим твоим постам, ты что-то типа поисковика хочешь получить, уж не знаю зачем и какой. Ты уверен, что тебе хватит такой структуры? Первое, что пришло в голову: как на стеке отследишь кольцевые ссылки, то что уже была раньше скачана страница? А такого ещё много всякого и куда сложнее.
Pcrepair (2012-12-20 20:53:00) [4]
> Лучше сделать класс Стек, а его объект хоть в глобальной
> храни.
то есть что то типа
type
SuperStack = class(TStack)
видимо добавить свои поля
и прописать в модуле как глобальную переменную?
Inovet (2012-12-20 20:14:00) [5]> [8] Pcrepair © (20.12.12 20:06)
> а доступность, типа как у глобальной переменной
Лучше сделать класс Стек, а его объект хоть в глобальной храни.
Pcrepair (2012-12-20 20:06:00) [6]
> Или тебе ещё и визуально надо это созерцать?
нет визуально не надо, ну только для контроля потом все содержимое переместить в МЕМО, на этапе стенда
а доступность, типа как у глобальной переменной
Медвежонок Пятачок (2012-12-20 20:01:00) [7]Стек элементарно делается.
К понедельнику может быть даже будет первая бета
Inovet (2012-12-20 19:52:00) [8]> [5] Inovet © (20.12.12 19:48)
> это всё
и в деструкторе почистить не забыть.
Inovet (2012-12-20 19:48:00) [9]> [4] Медвежонок Пятачок © (20.12.12 19:26)
> для поиска нужных рекордов по идентификаторам
Автору это не требуется, как и сами идентификаторы.
> [3] Pcrepair © (20.12.12 19:25)
> Inovet , то есть мостить что то самопальное из ЗАПИСЬ
Стек элементарно делается. Массив, индекс вершины, методы push, pop не забывать, как хранятся строки. Если понадобится заранее неизвестная глубина и не захочется лишнюю память с запасом распределять, то ещё перераспределение памяти надо будет сделать. Собственно, это всё.
Из стандартных можно TStringList приспособить.
Или тебе ещё и визуально надо это созерцать?
Медвежонок Пятачок (2012-12-20 19:26:00) [10]..... и еще написать кучу кода для поиска нужных рекордов по идентификаторам
Pcrepair (2012-12-20 19:25:00) [11]Inovet , то есть мостить что то самопальное из ЗАПИСЬ
а что по поводу компонентов из палитры? никто не не использовал?
Inovet (2012-12-20 19:22:00) [12]Так стек и сделать для хранения типа record "два поля: одно для УРЛ, второе для кода HTML-страницы".
Медвежонок Пятачок (2012-12-20 19:19:00) [13]идентификаторы - в узлы и атрибуты.
страницы - в узлы CDATA