Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.08.2007, 17:58   #1
key'
Пользователь
 
Регистрация: 08.08.2007
Сообщений: 15
Вопрос Работа через POST с html (помощь)

Погмогите разобратся
вот код:

=================================== ======================
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdHTTP;

type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
IdHTTP1: TIdHTTP;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;


implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
LoginInfo: TStrings;
Response: TStringStream;
begin
LoginInfo := TStringList.Create;
Response := TStringStream.Create('');
LoginInfo.Clear;
LoginInfo.Add('login=MyLogin');
LoginInfo.Add('password=MyPassword' );
IdHTTP1.Host:='avans.site.ru';
IdHTTP1.Port:=80;
IdHTTP1.Post('/billing/check.php',LoginInfo,Response);
Memo1.Clear;
Memo1.Lines.Add(Response.DataString );
Response.Free;
LoginInfo.Free;
end;
end.

=================================== ======================

результатом работы в Memo:
=======================
<?xml version="1.0" encoding="utf-8" ?>
<billing xmlns="http://avans.site.ru/billing/">
<name>MyName</name>
<lastUpdate iso="2007-08-08T17:50:03">08.08.2007 17:50:03</lastUpdate>
<nextUpdate iso="2007-08-08T17:55:03">08.08.2007 17:55:03</nextUpdate>
<money>2.00</money>
<moneyToday at="2007-08-08">14.28</moneyToday>
<!-- Generated in 0 seconds for MyIp -->
</billing>
========================

Вот вопрос как получить значение между <money>значение</money>?
key' вне форума Ответить с цитированием
Старый 08.08.2007, 18:04   #2
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

strt:=memo1.text;
strt:=copy(strt,pos('<money',strt)+ 8,length(strt)-(pos('<money',strt)+7);
strt:=copy(strt,1,pos('</',strt)-1);
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 08.08.2007, 18:38   #3
key'
Пользователь
 
Регистрация: 08.08.2007
Сообщений: 15
По умолчанию

спасибо большое Квэнди

=================================== ====================
var
strt: string;

begin
strt:=memo1.text;
strt:=copy(strt,pos('<money',strt)+ 7,length(strt)-(pos('<money',strt)+7));
strt:=copy(strt,1,pos('</',strt)-1);
memo1.Clear;
memo1.Text:=strt;
end;
=================================== ====================
Помогло =)
key' вне форума Ответить с цитированием
Старый 08.08.2007, 23:49   #4
key'
Пользователь
 
Регистрация: 08.08.2007
Сообщений: 15
По умолчанию

Квэнди еще вопросик =)
Как с помощью:
=================================== ===================
strt:=copy(strt,pos('<money',strt)+ 7,length(strt)-(pos('<money',strt)+7));
strt:=copy(strt,1,pos('</',strt)-1);
=================================== ===================

устроить цикл?
т.е. у меня в memo находиться
=================================== ===================
текст <money>2.7</money>
<money>3.1</money> тескт
текст <money>4.5</money>
очень много повтроряющихся стрк..
=================================== ===================

и как сделать чтоб он проверил все строки на наличие <money>значение</money> и вывел все значения

Если использовать
=================================== ==================
i:=0
while i<200 do
strt:=memo1.lines.Strings[i];
strt:=copy(strt,pos('<money',strt)+ 7,length(strt)-(pos('<money',strt)+7));
strt:=copy(strt,1,pos('</',strt)-1);
memo1.Lines.Add(strt);
i:=i+1;
=================================== ==================
то получается чушь - во-первых задавать руками i:integer как-то неправильно и строка мемо может содержать тока кусок кода, который продолжается на втрой строке и в результате бред ..

Последний раз редактировалось key'; 09.08.2007 в 00:21.
key' вне форума Ответить с цитированием
Старый 14.08.2007, 14:52   #5
Andrei
Форумчанин
 
Регистрация: 20.06.2007
Сообщений: 270
По умолчанию

Цитата:
Сообщение от key' Посмотреть сообщение
Квэнди еще вопросик =)
Как с помощью:
=================================== ===================
strt:=copy(strt,pos('<money',strt)+ 7,length(strt)-(pos('<money',strt)+7));
strt:=copy(strt,1,pos('</',strt)-1);
=================================== ===================

устроить цикл?
Вместо функции Pos попробуй использовать PosEx она позволяет начать поиск подстроки с определенной позиции. То-есть выполняешь первый поиск с начала строки, запоминаешь конечное положение. Выполняешь следующий поиск от запомненного положения + 1 и т.д.
-Кукушка, кукушка! Накукуй мне сто лет!
-А накукуй тебе столько?

(с) Библия. Вольный перевод с древнееврейского.
Andrei вне форума Ответить с цитированием
Старый 16.08.2007, 15:03   #6
S(p)@wN
Новичок
Джуниор
 
Регистрация: 16.08.2007
Сообщений: 2
По умолчанию

Для таких задач лучше всего использовать RegExp.. www.regexpstudio.com

function ExtractMoney(HTML: string; var Money: string): Boolean;
var
R: TRegExpr;
begin
Result:= False;
if Trim(HTML) <> '' then
begin
R:= TRegExpr.Create;
R.ModifierM:= False;
R.ModifierG:= False;
R.ModifierS:= False;
R.ModifierI:= False;
R.ModifierX:= False;
R.ModifierR:= False;
try
R.Expression:= '<money>(\d+\.\d+)</money>';
if R.Exec(HTML) then
begin
Result:= True;
repeat
Money:= Money + R.Match[1] + #13#10;
until not R.ExecNext;
end;
finally
R.Free;
end;
end;
end;

Результатом функции будет список нужных Вам значений, разделенными знаком перевода каретки aka #13
S(p)@wN вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа через прокси BESS Работа с сетью в Delphi 18 28.09.2008 21:45
работа с БД (компонент ADO,dbGrid) через dll oWish Помощь студентам 4 29.02.2008 12:23
Работа с текстовыйми файлами (plain + html) imposer Фриланс 5 15.01.2008 14:34
Как передать POST data через запрос в веб-приложение Anticrim Java для Web (EE, Servlet, JSP, Tomcat, Spring MVC) 3 03.10.2007 18:19
Нужна помощь по HTML-DK DKbelRoma HTML и CSS 10 09.09.2007 12:09