Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > После loop функция прекращается


Автор: neiron 18.4.2006, 15:19
Не пойму в чём проблема:

Код

'загрузка файла данных

Sub Zag_Dan(NameDanFile)
    UmZagr = False
    Open NameDanFile For Input Access Read As #1
       i = 0
    Do While EOF(1) = False
        i = i + 1
    Loop
    ReDim insolar(i - 1)
    i = 0
    Seek #1, 0
    Do While EOF(1) = False
        Input #1, insolar(i)
        insolar(i) = insolar(i) / 10
        i = i + 1
        Kolinsolar = i - 1
    Loop
End Sub


В общем, выход из процедуры происходит после выполнения первого цикла.
Как я понимаю, дело не в коде, а в настройках vb... что может быть?
в других местах программы do...while тоже есть, есть вложенные, и всё работает... Ток те места я писал до переустановки винды (а вместе с ней и самого vb).
Где флажок поставить?)))

 

Автор: Akina 18.4.2006, 15:35
Цитата(neiron @  18.4.2006,  16:19 Найти цитируемый пост)
выход из процедуры происходит после выполнения первого цикла

в т.ч. при пошаговом выполнении? бей код на блоки - где-то накосячил. 

Автор: boevik 18.4.2006, 15:46
Проблематичный код.
Если EOF вернет false, то цикл бесконечен, потому что нет чтения из файла.

В этом случае, файл видемо пуст и EOF возвращает true, поетому цикл не выполняется, значение i остается равным 0
и при попытке выполнить redim размером -1 возникает ошибка.
Могу предположить, чтп в вызывающей функции есть On Error Resume Next поэтому, управления передается команде следующей за вызовом функции Zag_Dan. 

Автор: neiron 18.4.2006, 21:29
Akina, ессно пробовал... loop проходит и переходит к следующей процедуре, а именно к mainform.
Если убираю первый блок do...loop, то второй работает нормально... выход происходит именно после первого завршённого цикла (сам цикл работает нормально).


boevik, чтение из файла есть - иначе как бы i изменялось... проверено на пошаговой;)
а на redim ошибка не возникает, так как до redim дело вообще не доходит))) А файл не пустой уж точно - при прямом открытии (пропись файла и его длины в коде) всё работает как надо...
On Error Resume Next нет... А если ошибка (cancel) и случается, то вообще не приводит к вызову Zag_dan. Но вызов есть...

Код

Private Sub OpenDan_Click()
    On Error GoTo ErrGo
    CDDan.ShowOpen
    Zag_Dan (CDDan.FileName)
    Exit Sub
ErrGo:
    Exit Sub
    End Sub


Всё-таки я думаю, что ошибка именно в vb самом... поскольку пробуя вставлять всё тот же do loop в другие проццедуры, получал то же самое - исполняется первый блок, а всё что за ним просто игнорируется...  smile   

Автор: cardinal 18.4.2006, 22:18
Цитата(neiron @  18.4.2006,  19:29 Найти цитируемый пост)
Всё-таки я думаю, что ошибка именно в vb самом...

Если в компиляторе ошибка, то это не компилятор, а кусок г252'а. Перед тем как такое говорить я бы лучше ковырял свой код.

А вообще тебе уже сказали
Цитата(boevik @  18.4.2006,  13:46 Найти цитируемый пост)
Если EOF вернет false, то цикл бесконечен, потому что нет чтения из файла.

Что непонятно? 

Автор: neiron 18.4.2006, 22:36
всё понял, спасибо... smile 
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)