2014-10-04 3 views
1

Этот код является частью функции, которая вызывается несколько раз.В наборе петель, почему рассматривается только первый?

for r = 0 to 4 
    do until searchname.AtEndOfStream 
     lineData = lcase(searchname.ReadLine()) 
     if instr(lineData,N(r))>0 then 
      if (r = 0) then 
       v = v + 1 
      elseif (r = 1) then 
       w = w + 1 
      elseif (r = 2) then 
       x = x + 1 
      elseif (r = 3) then 
       y = y + 1 
      elseif (r = 4) then 
       z = z + 1 
      end if 
     end if 
    loop 
next 

Моя проблема в том, что она учитывает только r = 0. Вместо этого я попробовал ubound(N). Я также попытался заменить петлю for (r = 0) на пять отдельных петель для v, w, x, y и z. Я также пробовал несколько других методов и другое форматирование, но это все еще не сработало.

ответ

3

После r = 0 случае, когда внутренний цикл достиг searchname.AtEndOfStream и вы приращение к следующему значению или r, searchname еще в конце потока. Поэтому цикл do выполняется только для первого случая цикла for. Рассмотрю эту альтернативу:

do until searchname.AtEndOfStream 
    lineData = lcase(searchname.ReadLine()) 
    for r = 0 to 4 
     if instr(lineData,N(r))>0 then 
      if (r = 0) then 
       v = v + 1 
      elseif (r = 1) then 
       w = w + 1 
      elseif (r = 2) then 
       x = x + 1 
      elseif (r = 3) then 
       y = y + 1 
      elseif (r = 4) then 
       z = z + 1 
      end if 
     end if 
    next 
loop 

переключая петлю вокруг, вы не доходите до конца потока до тех пор, пока вы закончили итерацию оба.

+0

Спасибо за то, что вернулись ко мне так скоро. Работает отлично. Я бы не стал на это по-другому мудрым. Просто интересно, если я когда-нибудь захочу пойти по другой структуре, как я могу перенести указатель обратно в начало после первого цикла? – user3782707

+0

Ну что такое 'searchname'; какая структура и как она создается? Вы посмотрели в своей документации? – jonrsharpe

+0

'searchname' - это просто текстовый файл, который был открыт. ('set searchname = objFSO.OpenTextFile ((« C: \ Inetpub \ wwwroot \ Files \ »& idname), 1, true)') – user3782707