Форум: "Начинающим";
Текущий архив: 2008.03.30;
Скачать: [xml.tar.bz2];
ВнизПроблеммы с TMemoryStream в TStringList... Найти похожие ветки
← →
Evil (2008-03-02 17:48) [0]Доброе время суток!!!
Есть процедура для поиска и закачки веб странички:
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;
← →
Loginov Dmitry © (2008-03-02 18:54) [1]код приведи в божеский вид! Читать это невозможно!
← →
Evil (2008-03-02 19:34) [2]
> код приведи в божеский вид! Читать это невозможно!
Извиняюсь за непонятный код,,, уже все испробывал что б найти проблему...
И всю тарабарщину суда впихнул, а отредактировать уже не могу...
Делаем:Stream.SaveToFile("tmp.html");
<< здесь сохраняется полностью веб страничка тоесть в стриме находится все данныеStream.Seek(0, 0);
sList.LoadFromStream(Stream);
<< здесь мы пытаемся загрузить в TStringList данные со Стрима...sList.SaveToFile("tmp1.html");
<< но получаеться что в TStringList загрузилась 1-2 строки... :(
← →
Loginov Dmitry © (2008-03-02 20:59) [3]> но получаеться что в TStringList загрузилась 1-2 строки
Значит в стриме после 1-2х строк находится символ #0.
← →
Evil (2008-03-02 21:40) [4]А можна как-то обойти эту проблему?
← →
{RASkov} © (2008-03-02 21:46) [5]> [4] Evil (02.03.08 21:40)
Это не проблема.... а непонимание....
Задачу свою лучше пересмотри с учетом совместимости "текстовых" и "нетекстовых" классов...
← →
Evil (2008-03-02 22:25) [6]Мдя... чето голова у меня совершенно сегодня не работает :(
Да по логике воно и правда не должно работать я получаеться бинарную инфу пытаюсь текстом зделать :)
Мож кто конкретным примером подскажет как мне с интернета получить веб страницу в текстовом виде,,, или же подскажет где ковырять...
Заранние спасибо!!!
← →
{RASkov} © (2008-03-02 22:50) [7]> [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;
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.03.30;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.038 c