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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.03.2011, 03:29   #1
gufon
Форумчанин
 
Регистрация: 21.12.2010
Сообщений: 224
По умолчанию Проблема с обработкой хтмл

Код:
Delete(Memo1.Lines.Text, pos('<td class="wforecast-cell">',Memo1.Lines.Text)+27, pos('&deg;C</td>',Memo1.Lines.Text)-26-pos('<td class="wforecast-cell">',Memo1.Lines.Text));
ругается на это строку, вот так
Цитата:
[Error] Unit1.pas(53): Constant object cannot be passed as var parameter
gufon вне форума Ответить с цитированием
Старый 27.03.2011, 03:56   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

правильно ругается, ведь в Delete первым параметром идёт var S : string, а Memo1.Lines.Text не является строкой (это свойство объекта).

обойти легко через переменную:
Код:
var s : string;

...

  s := Memo1.Lines.Text;
  Delete(s,
      pos('<td class="wforecast-cell">',Memo1.Lines.Text)+27,
      pos('&deg;C</td>',Memo1.Lines.Text)-26-pos('<td class="wforecast-cell">',Memo1.Lines.Text));
  Memo1.Lines.Text := s;
p.s. ну и я бы проверку добавил на то, что позиции '<td class="wforecast-cell">' и '&deg;C</td>' имеются в строке (т.е. Pos вернёт число отличное от нуля)...
впрочем, сие не особо критично. Просто красивее и надежнее...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.03.2011, 05:05   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Memo1.Lines.Text не является строкой
ЧТО?

Lines не является строкой. А Text является... потому что:
TMemo.Text:TCaption;
type TCaption = type string;


неа, у delete кол-во удаляемых знаков это константа....
алналогично с функцией Copy.. по этому я нашёл для себя такое решение:
Код:
function delete1(s:string; Start,Count:integer):string;
var
   ts:string;
   tc:integer;
begin
ts:=s;
tc:=count;
Delete(ts,Start,tc);
Result:=ts;
end;
и использую её для удаления в циклах For to do и там где ругается на неё.
Человек_Борща вне форума Ответить с цитированием
Старый 27.03.2011, 05:55   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Человек_Борща
неа, у delete кол-во удаляемых знаков это константа....
Э.. это Вы об чём?...
я хотел сказать, что код:
Код:
  Delete(Memo1.Lines.Text, 1,3);
не откомпилируется именно из-за того, что Memo1.Lines.Text нельзя передать как VAR параметр!
точно так же не откомпилируется код
Код:
  Delete(Memo1.Text, 1,3);
по той же самой причине!

кстати, Вам такая запись из исходников VCL
Код:
    property Text: TCaption read GetText write SetText;
о чём нибудь говорит?




p.s. а предложенное вами решение тоже использует дополнительную строку ( ts:string) куда присваивается исходная - т.е. по сути просто обёртка для того способа, который я и предложил.

Последний раз редактировалось Serge_Bliznykov; 27.03.2011 в 06:10.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.03.2011, 12:48   #5
gufon
Форумчанин
 
Регистрация: 21.12.2010
Сообщений: 224
По умолчанию

написал так
Код:
Delete(text, pos('<td class="wforecast-cell">',text)+27, pos('&deg;C</td>',text)-26-pos('<td class="wforecast-cell">',text));
тоже самое
gufon вне форума Ответить с цитированием
Старый 27.03.2011, 13:21   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

А что это здесь такоеText?
Delete(text, '<....

Должна быть
ПЕРЕМЕННАЯ (var) и НИЧТО другое. Внимательнее смотрите пример Сергея.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 27.03.2011, 13:57   #7
gufon
Форумчанин
 
Регистрация: 21.12.2010
Сообщений: 224
По умолчанию

все это есть
gufon вне форума Ответить с цитированием
Старый 27.03.2011, 14:06   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
все это есть
сомневаюсь!

вместо Text используйте нормальную переменную.
Например, S или sHTML или AllHTMLText

и проблем не будет!

или давайте Ваш исходный чудо-код!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.03.2011, 14:08   #9
gufon
Форумчанин
 
Регистрация: 21.12.2010
Сообщений: 224
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
сомневаюсь!
Код:
procedure TForm1.Button1Click(Sender: TObject);
var  i,b,k: integer; tetx: string;
begin

For i:= 0 to 0 do
Begin
Memo2.Lines.Text:=utf8toansi(IdHTTP1.Get('http://www.meteoprog.ua/ru/weather/Yenakievo/'));
Memo1.Lines.Text:=copy(Memo2.Lines.Text, pos('<td width="84" align=right style="padding: 5px 10px 5px 0px;">Темп. возд.</td>', Memo2.Lines.Text), pos('</table><!-- end weather information -->    </td>',Memo2.Lines.Text)-pos('<td width="84" align=right style="padding: 5px 10px 5px 0px;">Темп. возд.</td>', Memo2.Lines.Text));
for b:=0 to 3 do
text:=  Memo2.Lines.Text;
pog1.Caption:= copy(Memo1.Lines.Text, pos('<td class="wforecast-cell">',Memo1.Lines.Text)+27, pos('&deg;C</td>',Memo1.Lines.Text)-26-pos('<td class="wforecast-cell">',Memo1.Lines.Text));
Delete(text,
pos('<td class="wforecast-cell">',text)+27,
pos('&deg;C</td>',text)-26-pos('<td class="wforecast-cell">',text));
Begin
end;
end;
end;

end.
gufon вне форума Ответить с цитированием
Старый 27.03.2011, 18:43   #10
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Смотри ВНИМАТЕЛЬНО (по буквам)
Цитата:
Код:
var  i,b,k: integer; tetx: string;

text:=  Memo2.Lines.Text;
Delete(text,
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с обработкой исключений в Delphi при компиляции программы на сервере ivladak Общие вопросы Delphi 14 15.08.2009 20:58
WebBrowser проблема с загрузкой страницы и последующей обработкой OkeaH Общие вопросы Delphi 3 15.02.2009 01:43
Проблема с обработкой нажатой клавиши Bayazet Общие вопросы Delphi 7 10.02.2009 13:21
Проблема с обработкой DBF файла oleg kutkov Общие вопросы C/C++ 1 22.08.2008 21:07
Помогите с обработкой изображений Dude_first Мультимедиа в Delphi 3 31.08.2007 16:54