Почему в цикле рассматривается только первый?

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

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

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

Другие вопросы по тегам