Почему в цикле рассматривается только первый?
Этот код является частью функции, которая вызывается несколько раз.
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
, Я пробовал несколько других методов и другое форматирование, но это все равно не сработало.
1 ответ
Решение
После 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
Переключая циклы, вы не достигнете конца потока, пока не закончите итерацию по обоим.