var
St:WideString;
begin
try
St:=IdHTTP1.Get('Тут_url' ;
Delete(St,1,pos('<variable name="mp" type="int">',St)+length('<variable name="mp" type="int">')-1);
Delete(St,pos('</variable>',St),length(St));
Label9.Caption:=St;
except
on e:Exception do
end;
end;
Выдает ошибку:
[Ссылки могут видеть только зарегистрированные пользователи. ]
Хотя в Delphi7 все хорошо.
Из за чего это может быть?
Последний раз редактировалось Erstown; 11.04.2012 в 17:43.
Я имел ввиду чуть другое Тип переменной. Если взять такой пример:
St:WideString;
pos('qwerty',St)
'qwerty' - это строка, а строка имеет тип string, а string может быть UnicodeString/AnsiString/ShortString/WideString.
В D7 по умолчанию эта стркоа будет AnsiString, а в D9 и выше UnicodeString. Так как тип string по умолчанию вы не изменяли (скорее всего), то у вас строка '<variable name="mp" type="int">' имеет тип UnicodeString и получается, что вы пытаетесь искать UnicodeString в WideString, на что компилятор и ругается. В D7 такой проверки компилятор просто не проводит и в большинстве случаев это не приводит к ошибкам, так как в WideString редко попадают азиатские символы.
Если нужно использовать именно тип WideString, то надо либо указать тип переменной string по умолчанию WideString (директива {$H}), либо использовать следующий код:
Я имел ввиду чуть другое Тип переменной. Если взять такой пример:
St:WideString;
pos('qwerty',St)
'qwerty' - это строка, а строка имеет тип string, а string может быть UnicodeString/AnsiString/ShortString/WideString.
В D7 по умолчанию эта стркоа будет AnsiString, а в D9 и выше UnicodeString. Так как тип string по умолчанию вы не изменяли (скорее всего), то у вас строка '<variable name="mp" type="int">' имеет тип UnicodeString и получается, что вы пытаетесь искать UnicodeString в WideString, на что компилятор и ругается. В D7 такой проверки компилятор просто не проводит и в большинстве случаев это не приводит к ошибкам, так как в WideString редко попадают азиатские символы.
Если нужно использовать именно тип WideString, то надо либо указать тип переменной string по умолчанию WideString (директива {$H}), либо использовать следующий код:
Ясно, спасибо =)
А вот еще один вопрос есть. Как можно реализовать с помощью примера выше замену значения. Вот например, я вытянул в Edit то ,что находится после <variable name="mp" type="int"> и перед чем - то там. И нужно это значение заменить программно, допустим через тот же самый Edit
Мне надо заменить в самой странице.
То есть есть страница, что то меняешь, нажимаешь сохранить и сохраняется.
Вот типо такого.
Например:
<table width="450" border="1" cellspacing="0" cellpadding="3"> заместо "450", поставить "500".
Последний раз редактировалось Erstown; 13.04.2012 в 00:50.
Не могу что - то сделать.
Можешь какой нибудь пример написать?
Код:
procedure TForm1.Button9Click(Sender: TObject);
var
St:String;
begin
try
St:=IdHTTP1.Get('http://' + Edit1.Text + '/iweb/role/modrolexml.jsp?roleid=' + Edit2.Text);
Delete(St,1,pos('<variable name="mp" type="int">',St)+length('<variable name="mp" type="int">')-1);
Delete(St,pos('</variable>',St),length(St));
Label9.Caption:=St;
except
on e:Exception do
end;
end;
Вот по этому адресу:
St:=IdHTTP1.Get('http://' + Edit1.Text + '/iweb/role/modrolexml.jsp?roleid=' + Edit2.Text);
Надо поменять то, что стоит перед и после:
Delete(St,1,pos('<variable name="mp" type="int">',St)+length('<variable name="mp" type="int">')-1);
Delete(St,pos('</variable>',St),length(St));
Erstown, дай кусок из ответа сервера программе и скажи, что хочешь менять. Так ничего не ясно
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Распишу все от и до.
Допустим есть ссылка: [Ссылки могут видеть только зарегистрированные пользователи. ]
При переходе на нее, открывается страничка(Редактор xml) с информацией об определенном игроке.
На этой страничке, можно редактировать персонажа, менять его уровень и т.д
Например мне нужно поменять вот это значение - "200000000",
[Ссылки могут видеть только зарегистрированные пользователи. ]
на свое, выбранное в программе, например в SpinEdit.
После чего сохранить отредактированную информацию, нажав:
[Ссылки могут видеть только зарегистрированные пользователи. ]
function ChageValue(Source,NewValue):string;
var
s:string;
begin
s:=Copy(Source,Pos('"money"',Source)+19,50);
Delete(s,Pos('</variable>',s),Length(s)-Pos('</variable>',s));
Delete(Source,Pos('"money"',Source)+19,Length(s)-1);
Insert(NewValue,Source,Pos('"money"',Source)+19);
result:=Source;
end;
Вот тебе, как его юзать:
Код:
var
s,s1:string;
begin
s1:=IdHTTP.Get('http://blalba.net/');
s:=ChangeValue(s1,'100500');
end;
В итоге значение 2000000 поменяется на 100500.
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).