Реферат: О пользе циклов
Do While Not EOF(1)
Теперь работа цикла ничуть не изменится. Ведь мы хоть и поменяли условие, но цель оставили прежней! Not EOF(1) значит что EOF(1) ложно, конец файла не достигнут. А так как While работает только тогда, когда условие ложно, то цикл продолжает работать!
Во-вторых, эти ключевые слова можно менять местами и ставить можно как в начало цикла:
Do [Until | While] условие
так и в конец цикла
Loop [Until | While] условие
Разница состоит в том, что цикл может исполниться хотя бы один раз или не исполнится вообще. В нашем случае слово Until стоит в начале, значит если файл окажется пустым, то тут же будет достигнут конец файла, условие сразу станет ложным и цикл тут же перестаёт работать! Попробуйте теперь взять и перенести слова Until EOF(1) на один пробел от Loop. Запустите проект. Ага!!! Ошибка! Знаете почему? Потому что оператор Line Input# пытается считать строку в то время как конец файла уже достигнут. Цикл упустил этот момент, т.к. засечь он его может в конце, а до конца он не дойдёт. Приведу так же пример из моего примера в "Практике":
Do
с помощью InStr получаем местоположение искомого символа
если оно равно нулю, покидаем цикл
ReturnNumber = InStr(1, Stroka, Symbol): If _
ReturnNumber = 0 Then Exit Do
строке присваем все символы слева до искомого символа и справа
Stroka = Left(Stroka, ReturnNumber - 1) + _
Right(Stroka, Len(Stroka) - ReturnNumber)
Loop
Здесь невозможно воспользоваться ни Until, ни While, и вот почему: если ReturnNumber будет равно нулю, то, допустим, здесь
Left(Stroka, ReturnNumber - 1)
возникнет ошибка, т.к. минимальную длину функция Left понимает только 0, а здесь получается -1 (0 - 1)!!! Поэтому
Do Until ReturnNumber = 0
поставить нельзя, ведь переменная Integer "от рождения" равна нулю и цикл проигнорирует сам себя тут же. OK, но мы можем прежде написать:
ReturnNumber = 1
ДА! И цикл откроется, сделае всё и как надо, но когда искомые символы кончатся и ReturnNumber снова будет равно нулю ПОСЛЕ проверки и поэтому опять возникает ошибка! Тогда ставим перед Loop
Until ReturnNumber = 0
в конец. И здесь опять та же самая беда - ReturnNumber будет равно нулю теперь ДО проверки и ОПЯТЬ ошибка!!! Остаётся одно - воспользоваться в нужном месте выходом из цикла Exit Do. Где это нужное место? А там где функцмя только узнает, что искомых символов больше нет, т.е. сразу после неё ставим условие:
If ReturnNumber = 0 Then Exit Do
Конструкция For...Next.
Итак, цикл For...Next это, наверное, самый простой и нужный цикл в программирований на Visual Basic. Его применяют, когда число повторений известно заранее. В отличии от цикла Do, в цикле For используется переменная, называемая переменной цикла или счётчиком цикла. Которая увеличивается или уменьшается на заданую величину при каждом повторении цикла. Самый-самый простой пример, который приводит везде, где приводится ;-) :
For x = 1 To 3 переменную x, равную 1, возводим до 3