Использование Продолжить в цикле - PullRequest
6 голосов
/ 30 августа 2011

Можно ли использовать цикл Continue при работе с текстовыми файлами?

Я хотел бы выполнить некоторую обработку и проверить некоторые значения. Если это правда, я бы хотел пропустить итерацию. Если false, я хотел бы продолжить со следующим набором строк (продолжить обработку).

while not EOF(InFile) do  
begin  
 DoSomething;  
 if (AcctTag = '') OR (MasterId = '') then  
  Continue;  
 DoSomething;  
end;  

Продолжение в этом случае пропускает итерацию?

Ответы [ 2 ]

12 голосов
/ 30 августа 2011

Кажется, что быстрый 30-секундный тест ответил бы на это быстрее, чем пост здесь. :)

program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  i, j: Integer;

begin
  j := 0;
  i := 0;
  while i < 10 do
  begin
    Inc(i);
    if Odd(i) then
      Continue;
    Inc(j);
    WriteLn(Format('i = %d, j = %d', [i, j]));
  end;
  ReadLn;
end.

Sample output

Обратите внимание, что i увеличивается перед вызовом на Continue, что приводит к j отображению нечетных чисел, а я even? j увеличивается только тогда, когда цикл проходит тест Continue.

A while работает одинаково, независимо от того, увеличиваете ли вы целое число, объединяете строку или читаете из текстового файла. while - это while - это while независимо от того, как вы его используете. Вам просто нужно убедиться, что в приведенном выше коде DoSomething действительно читает следующую строку из файла, иначе вы попадете в непрерывный цикл.

8 голосов
/ 30 августа 2011

Тест даже не нужен. Документация уже говорит вам ответ:

В коде Delphi процедура Continue заставляет поток управления перейти к следующей итерации включения для, while или repeatзаявление.

Обратите внимание, что нет никаких предостережений относительно того, что делает цикл.Оператор Continue переходит к следующей итерации цикла any .В вашем случае это означает, что Eof будет проверен снова, а затем будет выполнено тело цикла.

...