Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.12.2011, 00:08
logic1878 logic1878 вне форума
Прохожий
 
Регистрация: 13.12.2011
Сообщения: 2
Репутация: 10
По умолчанию httgettext

Привет всем. Имеется код:

Код:
procedure cmd;
var
ts:Tstringlist;
st:string;
begin
ts:=Tstringlist.Create;
httpgettext('http://server.com/cmd.txt',ts);
st:=ts.strings[0];
if pos('cmd1',st)<>0 then
begin
******
******
sleep(10000);
cmd;
end
else
if pos('sd',st)<>0 then
begin
******
******
sleep(10000);
cmd;
end

Проблема такова, сервер на котором лежит txt файл, часто недоступен, соответственно возникает ошибка "List index out of bounds (0)". Ну и до этого еще ошибка "Исключение неизвестное программное исключение (0x0eedfade) в приложении по адресу 0x7c812afb" Как правильно обработать ошибку?
Ошибка возникает вот тут:
Код:
if pos('cmd1',st)<>0 then
P.S. Пробовал try except, ошибки пропадают, но через некоторое время программа просто вылетает.
Может быть есть какой есть другой вариант прочитать файл на сервере (желательно без компонентов)
Буду признателен за все ответы.
Спасибо.
Ответить с цитированием
  #2  
Старый 14.12.2011, 02:35
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,036
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

для начала вот так:
Код:
procedure cmd;
var
  ts:Tstringlist;
  st:string;
begin
  ts:=Tstringlist.Create;
  Try
    httpgettext('http://server.com/cmd.txt',ts);
    st:=ts.strings[0];
    if pos('cmd1',st)<>0 then
      begin
        ******
        ******
      end
    else
      if pos('sd',st)<>0 then
        begin
          ******
          ******
        end
      else Raise Exception.Create('');
    sleep(10000);
    cmd;
  Finally
    ts.Free;
  End;
end.

но все-равно будет вылетать, т.к. у тебя тут бесконечная рекурсия.
Я бы делал как то так:
1. Делаем таймер. Интервал ставим на 10000.
2. В обработчике делаем так:
Код:
procedure TForm1.Timer1Timer(Sender : TObject);
begin
  Timer1.Enabled := False;
  Try
     cmd;
  Finally
     Timer1.Enabled := True;
  End;
end;
3. А саму процедуру делаем так:
Код:
procedure cmd;
var
  ts:Tstringlist;
  st:string;
begin
  ts:=Tstringlist.Create;
  Try
    httpgettext('http://server.com/cmd.txt',ts);
    st:=ts.strings[0];
    if pos('cmd1',st)<>0 then
      begin
        ******
        ******
      end
    else
      if pos('sd',st)<>0 then
        begin
          ******
          ******
        end;
  Finally
    ts.Free;
  End;
end;

Если это консольное приложение и окна нет, то таймер заменяем такой конструкцией:
Код:
While (True) Do
  Try
     cmd;
     sleep(10000);
  Except;
  End;
Ответить с цитированием
  #3  
Старый 14.12.2011, 10:53
logic1878 logic1878 вне форума
Прохожий
 
Регистрация: 13.12.2011
Сообщения: 2
Репутация: 10
По умолчанию

Спасибо Вам, добрый человек, все работает
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:34.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter