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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.06.2009, 14:52   #1
AndreyF
Пользователь
 
Регистрация: 15.10.2008
Сообщений: 44
По умолчанию Как прервать внешний цикл?

Добрый день!
Подскажите пожалуйста.
Пытаюсь вычислить координаты нужной ячейки в excel.
В этом коде, если значение ячейки равно ФОРУМ, то вложенный цикл прервётся.
А как прервать два цикла сразу, чтоб вычислить координаты ячейки?

Цитата:
for x:=1 to 20 do
for y:=1 to 20 do
if AnsiUpperCase(page_import.Cells[x,y])='ФОРУМ' then break;
AndreyF вне форума Ответить с цитированием
Старый 13.06.2009, 14:59   #2
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Ну, например какой-нибудь булевской переменной присвоить true:
Код:
var
 b: boolean;
begin
 b := false;
 for x:=1 to 20 do
 begin
  for y:=1 to 20 do
   if AnsiUpperCase(page_import.Cells[x,y])='ФОРУМ' then 
   begin
    b := true;
    break; 
   end;
  if b then Break;
 end;
end;
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Старый 13.06.2009, 15:00   #3
Evgeniy26
Форумчанин
 
Аватар для Evgeniy26
 
Регистрация: 29.05.2009
Сообщений: 384
По умолчанию

Тогда и такой вариант:
Код:
procedure TForm1.Button1Click(Sender: TObject);

 procedure Excel;
 var
   x, y: Integer;
 begin
   for x:=1 to 20 do
     for y:=1 to 20 do
       if AnsiUpperCase(page_import.Cells[x,y])='ФОРУМ' then
         exit;
 end;

begin
  Excel;
end;

Последний раз редактировалось Evgeniy26; 13.06.2009 в 15:11.
Evgeniy26 вне форума Ответить с цитированием
Старый 13.06.2009, 15:04   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Ну раз про булеву переменную уже сказали, то предложу еще такой вариант:
Код:
label l1;
begin
//...................
for x:=1 to 20 do
 for y:=1 to 20 do
  if AnsiUpperCase(page_import.Cells[x,y])='ФОРУМ' then goto l1;

l1:
//.................
Хоть это и не очень красиво
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 13.06.2009, 15:14   #5
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Нормальный вариант, Sazary
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Старый 13.06.2009, 16:25   #6
AndreyF
Пользователь
 
Регистрация: 15.10.2008
Сообщений: 44
По умолчанию

всё работает, всем спасибо.
AndreyF вне форума Ответить с цитированием
Старый 13.06.2009, 16:39   #7
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Sazary, +1
з.ы. Это даже очень красиво, лучший способ выхода из вложенных циклов.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 15.06.2009, 09:38   #8
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

да не чего красивого нет...ужассс просто..потом как код читать... Не удобно....У меня реализовано так

Код:
for i:=1 to 20 do
      for j:=1 to 20 do
        if(VarToStrDef(ws[jj].Cells[i,j],'')='Текстовое значение')then
        begin
          st_y:=i;
          st_x:=j;
          Break;
        end;
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 15.06.2009, 09:56   #9
__STDC__
Участник клуба
 
Аватар для __STDC__
 
Регистрация: 16.03.2009
Сообщений: 1,013
По умолчанию

Цитата:
Сообщение от BARNEY Посмотреть сообщение
да не чего красивого нет...ужассс просто..потом как код читать... Не удобно....У меня реализовано так
и? это выход из вложенного цикла, а не из внешнего...

***
код Sazary вполне хорош. Вы наслушались сказок про goto, вбили себе в голову что его НИКОГДА нельзя использовать и критикуете... в данном случае читабельность кода ничуть не ухудшается.
Uguu~

Последний раз редактировалось __STDC__; 15.06.2009 в 09:58.
__STDC__ вне форума Ответить с цитированием
Старый 15.06.2009, 11:52   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Не знаю как кто, но я всегда такие случаи делаю так:
Код:
 procedure Excel;
 var
   x, y: Integer;
   b:boolean;
 begin
  b:=true;
   x:=1; while b and(x<20) do begin
     y:=1; while b and (y<20) do begin
       b:=AnsiUpperCase(page_import.Cells[x,y])='ФОРУМ';
       inc(y);
      end;
      inc(x);
    end;
 end;

begin
  Excel;
end;
Я кстати тоже не любитель GOTO, но считаю это делом вкуса.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Внешний и Внутренний IP Пепел Феникса Win Api 7 09.02.2010 15:38
delphi 7, как прервать выполнение программы Altera Софт 3 27.07.2008 15:14
Цикл с предусловием. ( цикл while) Цикл с постусловием. (цикл repeat ... until) Mr.User Помощь студентам 9 23.11.2007 01:34
Внешний Ip Enemy Работа с сетью в Delphi 3 20.11.2007 01:00