![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблеммы с TMemoryStream в TStringList... [D2005, XP]
Evil © (2008-03-02 17:48:00)Доброе время суток!!!
Есть процедура для поиска и закачки веб странички:
procedure LoadAndView(ASearchName: String);
var
BufferLen: DWORD;
Buffer: array[1..1024] of Byte;
hSession, hURL: HInternet;
Stream : TMemoryStream;
sList : TStringList;
strCount, I, pS, BeginPos : Integer;
tmpstr, nUri, sName : String;
const
toSearchStr = ' http://www.kinopoisk.ru/index.php?kp_query=';
begin
Stream := TMemoryStream.Create;
sList := TStringList.Create;
hSession := InternetOpen('parser', PRE_CONFIG_INTERNET_ACCESS, nil, nil, 0);
hURL := InternetOpenURL(hSession,PChar(toSearchStr + HTTPEncode(ASearchName)),nil, 0, 0, 0);
repeat
InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen);
Stream.WriteBuffer(Buffer, SizeOf(Buffer));
until
BufferLen = 0;
Stream.Seek(0, 0);
Stream.SaveToFile('tmp.html'); << здесь сохраняется полностью веб страничка
Stream.Seek(0, 0);
sList.LoadFromStream(Stream); << здесь казалось бы должна быть полная страница....
sList.SaveToFile('tmp1.html'); << но здесь получаем полнейший облом,,, тоесть у нас в TStringList находится реально токо 1-2 строки...
strCount := sList.Count;
for I := 0 to strCount - 1 do
begin
pS := pos(UpperCase(format(slinkTformat, [ASearchName])), UpperCase(sList.Strings[I]));
if pS <> 0 then
begin
tmpstr := copy(sList.Strings[I], 0, pS - 1);
BeginPos := Pos('href="', tmpstr);
if BeginPos <> 0 then
begin
nUri := copy(tmpstr, BeginPos + Length('href="') + 1, Length(tmpstr) - (BeginPos + Length('href="')));
sName := copy(sList.Strings[I], pS + 2, pos(sLinkTOver,sList.Strings[I]) - pS - 2);
ValueListEditor.InsertRow(sName, SiteUrl + nUri, true);
end;
end;
end;
Stream.Free;
sList.Free;
end;
{RASkov} (2008-03-02 22:50:00) [1]> [6] Evil (02.03.08 22:25)
> Мож кто конкретным примером подскажет как мне с интернета
> получить веб страницу в текстовом виде
Ну может нечто так:
uses IdHTTP;
...............
begin
with TIdHTTP.Create(nil) do try
Memo.Text:=Get(' http://www.ya.ru');
finally
Free;
end;
end;
Evil (2008-03-02 22:25:00) [2]Мдя... чето голова у меня совершенно сегодня не работает :(
Да по логике воно и правда не должно работать я получаеться бинарную инфу пытаюсь текстом зделать :)
Мож кто конкретным примером подскажет как мне с интернета получить веб страницу в текстовом виде,,, или же подскажет где ковырять...
Заранние спасибо!!!
{RASkov} (2008-03-02 21:46:00) [3]> [4] Evil (02.03.08 21:40)
Это не проблема.... а непонимание....
Задачу свою лучше пересмотри с учетом совместимости "текстовых" и "нетекстовых" классов...
Evil (2008-03-02 21:40:00) [4]А можна как-то обойти эту проблему?
Loginov Dmitry (2008-03-02 20:59:00) [5]> но получаеться что в TStringList загрузилась 1-2 строки
Значит в стриме после 1-2х строк находится символ #0.
Evil (2008-03-02 19:34:00) [6]
> код приведи в божеский вид! Читать это невозможно!
Извиняюсь за непонятный код,,, уже все испробывал что б найти проблему...
И всю тарабарщину суда впихнул, а отредактировать уже не могу...
Делаем:
Stream.SaveToFile('tmp.html');<< здесь сохраняется полностью веб страничка тоесть в стриме находится все данные
Stream.Seek(0, 0);
sList.LoadFromStream(Stream);<< здесь мы пытаемся загрузить в TStringList данные со Стрима...
sList.SaveToFile('tmp1.html');<< но получаеться что в TStringList загрузилась 1-2 строки... :(
Loginov Dmitry (2008-03-02 18:54:00) [7]код приведи в божеский вид! Читать это невозможно!