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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.08.2014, 11:25   #21
Silver_S
Форумчанин
 
Регистрация: 14.03.2011
Сообщений: 104
По умолчанию

Цитата:
Сообщение от mitiay Посмотреть сообщение
Прошелся host not found...
Видать второй хостинг тоже отключили...

Также потерян end после exit. Этого бы скорее всего не произошло, если бы ваш код был отформатирован.

Последний раз редактировалось Silver_S; 12.08.2014 в 11:28. Причина: дописал чуток
Silver_S вне форума Ответить с цитированием
Старый 12.08.2014, 14:31   #22
mitiay
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 288
По умолчанию

Цитата:
Сообщение от Silver_S Посмотреть сообщение
Видать второй хостинг тоже отключили...

Также потерян end после exit. Этого бы скорее всего не произошло, если бы ваш код был отформатирован.
Все работает!Только вот как проверить?пишу кривой домен(не существующий) второй пишу свой выходит ошибка.То есть если с первым доменом будут проблемы будет просто выходить ошибка?

Добавляю в констану еще одно значение 1..3 + еще сайт.Работать отказывается

Последний раз редактировалось mitiay; 12.08.2014 в 14:51.
mitiay вне форума Ответить с цитированием
Старый 12.08.2014, 14:56   #23
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А ну ка ткни пальчиком, где она там зацикливается с пояснением, и я добавлю тебе баллов, если пояснение будет правдивым.
КОД ЧИТАТЬ НАДО!

Автор, поместил
Код:
inc(k);
сюда:
Код:
try 
...
expert
inc(k);
end;
Так получается, что у него в случае ошибки переменная увеличивается. Всё это вырабатывается в цикле While Do. Переменная k остается всегда постоянной и код выполняется постоянно(зацикливается). Так как ошибки не происходит.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 12.08.2014, 14:59   #24
mitiay
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 288
По умолчанию

Цитата:
Сообщение от саша40 Посмотреть сообщение
КОД ЧИТАТЬ НАДО!

Автор, поместил
Код:
inc(k);
сюда:
Код:
try 
...
expert
inc(k);
end;
Так получается, что у него в случае ошибки переменная увеличивается. Всё это вырабатывается в цикле While Do. Переменная k остается всегда постоянной и код выполняется постоянно(зацикливается). Так как ошибки не происходит.
Подскажи как правельно )))
mitiay вне форума Ответить с цитированием
Старый 12.08.2014, 15:05   #25
Silver_S
Форумчанин
 
Регистрация: 14.03.2011
Сообщений: 104
По умолчанию

Какая ошибка выходит? Если ошибка "socket error" или что-то в этом роде, попробуйте запустить без отладки.

В цикле while исправьте "<" на "<=". Иначе последний элемент массива не проверяется.

PS. Уверен, что Inc(k) стоит где надо.
Silver_S вне форума Ответить с цитированием
Старый 12.08.2014, 15:12   #26
mitiay
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 288
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
const blabla:array[1..3] of string=('site.ru,'site2.ru','site3.ru');
var k:integer;
   sl: TStringList;
    i: integer;
    s:string;
begin
s:='';
k:=Low(blabla);
while k<=Length(blabla) do
 try
  s:= idhttp1.Get('http://'+blabla[k]+'/key.txt');
  break;
 except
  inc(k);
 end;

if s='' then begin
 ShowMessage('????? ?? ???????');
 exit;
 end;
begin
sl:= TStringList.Create;
sl.Text:=s;

    for i:= 0 to sl.Count-1 {??? ??????? ????, ????. 5} do
   (FindComponent('Edit' + IntToStr(i+1)) as TEdit).Text:= sl[i];
 sl.Free;
На первых двух удалил key.txt
При запуске приложения в отладчике ругается на break;

http://screenshot.ru/d32b1a908b325e4ddada656cbd36ec29
mitiay вне форума Ответить с цитированием
Старый 12.08.2014, 15:32   #27
Silver_S
Форумчанин
 
Регистрация: 14.03.2011
Сообщений: 104
По умолчанию

Каким образом ругается на break? Я на скриншоте вижу просто выделенную строчку.

Выключите Notify on Language Exceptions, если стоит.

Вместо "k<=Length(blabla)" еще лучше будет "k<=High(blabla)" (на случай, если массив начнете нумеровать с другого индекса).

Последний раз редактировалось Silver_S; 12.08.2014 в 15:34.
Silver_S вне форума Ответить с цитированием
Старый 12.08.2014, 15:43   #28
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
КОД ЧИТАТЬ НАДО!
Специально для тех, кто невнимательно читает код поясняю свою идею:
Код:
const blabla:array[1..2] of string=('sait.ru','site2.ru');
procedure TForm1.Button1Click(Sender: TObject);
var k:integer;
   sl: TStringList;
    i: integer;
    s:string;
begin
s:='';
k:=Low(blabla); // Получаем номер первого сайта в массиве
while k<Length(blabla) do //В цикле пока этот номер не достиг предела установленного нами массива
 try
// Пытаемся:
  s:= idhttp1.Get('http://'+blabla[k]+'/1.txt'); //получить сайт
  break; //ВНИМАНИЕ!!: Если удалось получить - выходим из цикла
 except
  inc(k); //Если не удалось - берем следующий сайт увеличив номер.
 end;
Так понятно?

Еще такой момент: idhttp1.Get может отрабатывать верно, но в переменку попадает пустая строка. Возможно защита на сайте. Опять таки не знаю, ибо тут нужна отладка - пошаговка, на которую я намекал выше.
Цитата:
В цикле while исправьте "<" на "<=". Иначе последний элемент массива не проверяется.
Если работает Length() то нужно < ибо эта функа возвращает кол-во элементов в массиве.
Если работает High() то нужно <=.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.08.2014, 15:49   #29
Silver_S
Форумчанин
 
Регистрация: 14.03.2011
Сообщений: 104
По умолчанию

В вашем случае
Код:
array[1..2]
Length(blabla) равно 2 и максимальный индекс массива High(blabla) также равен 2.
Начальное значение k = 1.
Условие цикла
Код:
 k<Length(blabla)
При первой итерации k = 1, тело цикла выполнится.
При второй k = 2, условие ложно, тело цикла выполняться не будет.

Таким образом ваш код "недоцикливается".

Последний раз редактировалось Silver_S; 12.08.2014 в 15:55.
Silver_S вне форума Ответить с цитированием
Старый 12.08.2014, 16:34   #30
mitiay
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 288
По умолчанию

Цитата:
Сообщение от Silver_S Посмотреть сообщение
В вашем случае
Код:
array[1..2]
Length(blabla) равно 2 и максимальный индекс массива High(blabla) также равен 2.
Начальное значение k = 1.
Условие цикла
Код:
 k<Length(blabla)
При первой итерации k = 1, тело цикла выполнится.
При второй k = 2, условие ложно, тело цикла выполняться не будет.

Таким образом ваш код "недоцикливается".
Значит данный код не работает как надо?
mitiay вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрос на выборку и отчет на этот запрос Camelot_2012 Microsoft Office Access 2 21.12.2011 16:48
Запрос с CASE переделать в запрос с PIVOT (MS SQL Server 2005) Машуля SQL, базы данных 4 06.05.2010 21:09
sq запрос viperrr Помощь студентам 9 05.06.2009 02:00
запрос ссылается на несвязанный с ним запрос kolebatel SQL, базы данных 0 11.06.2008 12:50