powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Глупый вопрос про цикл FOR
16 сообщений из 16, страница 1 из 1
Глупый вопрос про цикл FOR
    #36543093
Marianna-sec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, вопрос в следующем.
Никак не могу найти аналог continue в VB, чтобы выполнение программы продолжалось со следующей итерации цикла, игнорируя остальные операторы в его теле. что-то типа

for i=1 to N
if (условие) then <continue>
Next

Спасибо.
PS/Простите, если вопрос очень глупый, но я убила на это уже уйму времени. :(
...
Рейтинг: 0 / 0
Глупый вопрос про цикл FOR
    #36543136
zchvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
For i=1 to N

if условие then
.инструкции
else
GoTo metka
end if

metka:
Next i
...
Рейтинг: 0 / 0
Глупый вопрос про цикл FOR
    #36543139
Marianna-sec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не очень хорошо отношусь к goto. неужели ничего больше не предусмотрено, что реализовывало тот же механизм, то не содержало фразы goto? :(
...
Рейтинг: 0 / 0
Глупый вопрос про цикл FOR
    #36543144
zchvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GoTo в этом контексте Вам ничем не навредит. Суха теория, а древо жизни пышно зеленеет.
...
Рейтинг: 0 / 0
Глупый вопрос про цикл FOR
    #36543146
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Marianna-sec
> не очень хорошо отношусь к goto. неужели ничего больше не предусмотрено, что реализовывало тот же механизм, то не
> содержало фразы goto? :(

Разве в справке к VBA написанно не понятно?
Syntax
For counter = start To end [Step step]
[statements]
[Exit For]
[statements]

Next [counter]

можно обойтись и без goto, просто "расширить" область действия условия

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Глупый вопрос про цикл FOR
    #36543159
Marianna-sec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игорь Горбонос,
А Вы можете привести пример?
...
Рейтинг: 0 / 0
Глупый вопрос про цикл FOR
    #36543171
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Marianna-sec
> Игорь Горбонос,
> А Вы можете привести пример?

Пример чего? zchvv дал вполне работоспособную заготовку. Измените под свои нужды и пользуйтесь.
Или дайте свой цикл я покажу на ваших условиях

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Глупый вопрос про цикл FOR
    #36543216
Marianna-sec,

если это вопрос типа учебного, или на собеседовании, то можно проявить свою эрудированность, показав, например, как Exit {тип цикла} может выполнять роль continue:
Код: plaintext
1.
2.
3.
4.
5.
6.
 For i =  1  To N
    Do
       'операторы
       If (условие) Then Exit Do
       'операторы
    Loop While False
 Next i
, и рассказав про его большие плюсы (отсутствие GoTo) и умолчав про "ма-а-аленькие" минусы (или, наоборот, выставив в качестве большого недостатка мелочь вроде того, что такой приём не всегда применим). А реальным минусом является ухудшение семантики - если GoTo простым, прямым и недвусмысленным образом показывает, какого эффекта Вы хотите добиться, о подобные фокусы глаз и ум вполне чувствительно спотыкаются.

И ещё: чем плохо
Код: plaintext
1.
2.
3.
4.
5.
 For i =  1  To N
    'операторы
    If Not (условие) Then
       'операторы
    End If
 Next i
?
...
Рейтинг: 0 / 0
Глупый вопрос про цикл FOR
    #36543269
Marianna-sec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Отсюда, наверное, кроме как GOTO вырваться не получится. Дело в том, что условие в условии и еще раз в условии. :( Или есть варианты? Может как-то подправить что-то где-то

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
For Each node In xml.documentElement.getElementsByTagName("table")
    tbl = Filter(ar, node.Attributes.Item( 1 ).Text)
    If UBound(tbl) <> - 1  Then
        If Not CheckTableExistence(tbl( 0 )) Then

            '------------------------------------------
            If Not CreateTabs(tbl( 0 )) Then GoTo nextiteration 
            '------------------------------------------

        End If
    Else
        'MsgBox "Не нашел таблицу " & node.Attributes.Item(1).Text & " среди справочников!"
    End If
'-----------------------------------------
nextiteration:
'-----------------------------------------
    tbl = Null
Next
...
Рейтинг: 0 / 0
Глупый вопрос про цикл FOR
    #36543328
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Marianna-secОтсюда, наверное, кроме как GOTO вырваться не получится. Дело в том, что условие в условии и еще раз в условии. :( Или есть варианты? Может как-то подправить что-то где-тоА в чем смысл самой внутренней проверки?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
For Each node In xml.documentElement.getElementsByTagName("table")
    tbl = Filter(ar, node.Attributes.Item( 1 ).Text)
    If UBound(tbl) <> - 1  Then
        If Not CheckTableExistence(tbl( 0 )) Then
            CreateTabs(tbl( 0 ))
        End If
    Else
        'MsgBox "Не нашел таблицу " & node.Attributes.Item(1).Text & " среди справочников!"
    End If
    tbl = Null
Next
Будьте проще и компьютер заработает быстрее :)
...
Рейтинг: 0 / 0
Глупый вопрос про цикл FOR
    #36543386
Marianna-sec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
функция CreateTabs создает таблицы, а если таблица не создана, то надо попытаться создать следующую, то есть следующий node с тегом table :(
на самом деле код чуть-чуть побольше, поэтому без проверки никак
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Set fs = CreateObject("Scripting.FileSystemObject")
For Each node In xml.documentElement.getElementsByTagName("table")
    tbl = Filter(ar, node.Attributes.Item( 1 ).Text, , vbDatabaseCompare)
    If UBound(tbl) <> - 1  Then
        'MsgBox "Нашел таблицу " & node.Attributes.Item(1).Text & " среди справочников!"
        If Not CheckTableExistence(tbl( 0 )) Then
            '000000000000000000000000000000000
            If Not CreateTabs(tbl( 0 )) Then GoTo nextiteration
            '000000000000000000000000000000000
        End If

        'еще много кода

    Else
        'MsgBox "Не нашел таблицу " & node.Attributes.Item(1).Text & " среди справочников!"
    End If
    Forms("Enter").ProgressBar1.Value = Forms("Enter").ProgressBar1.Value +  1 
nextiteration:
    tbl = Null
Next
...
Рейтинг: 0 / 0
Глупый вопрос про цикл FOR
    #36543401
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Marianna-secОтсюда, наверное, кроме как GOTO вырваться не получится. Дело в том, что условие в условии и еще раз в условии. :( Или есть варианты? Может как-то подправить что-то где-то

Ну почему-же, можно воспользоваться старым дедовским способом:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
On Error GoTo nextiteration
For Each node In xml.documentElement.getElementsByTagName("table")
    tbl = Filter(ar, node.Attributes.Item( 1 ).Text)
    If UBound(tbl) <> - 1  Then
        If Not CheckTableExistence(tbl( 0 )) Then
             CreateTabs(tbl( 0 ), True)
        End If
    Else
        'MsgBox "Не нашел таблицу " & node.Attributes.Item(1).Text & " среди справочников!"
    End If
'-----------------------------------------
nextiteration:
'-----------------------------------------
    tbl = Null
Next
End Sub

Function CreateTabs(tb(), Optional IsRaiseError As Boolean = False) As Boolean
' Много кода по созданию таблиц
If CreateTabs And IsRaiseError Then
    Err.Raise vbObjectError +  1 , "CreateTabs", "Не создалась таблица"
End If
End Function

Кстати, при чем FSO не понятно
...
Рейтинг: 0 / 0
Глупый вопрос про цикл FOR
    #36543416
Marianna-sec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мм, спасибо, вариант похожий, но тем не менее интересный.
и fso я правда объявляла зря, видимо что-то было раньше
...
Рейтинг: 0 / 0
Глупый вопрос про цикл FOR
    #36543500
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Marianna-secфункция CreateTabs создает таблицы, а если таблица не создана, то надо попытаться создать следующую, то есть следующий node с тегом table :(
на самом деле код чуть-чуть побольше, поэтому без проверки никакТогда можно например так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
For Each node In xml.documentElement.getElementsByTagName("table")
    tbl = Filter(ar, node.Attributes.Item( 1 ).Text, , vbDatabaseCompare)
    If UBound(tbl) <> - 1  Then
        'MsgBox "Нашел таблицу " & node.Attributes.Item(1).Text & " среди справочников!"
        Dim TableCreated as Boolean
        If Not CheckTableExistence(tbl( 0 )) Then
            '000000000000000000000000000000000
            TableCreated = CreateTabs(tbl( 0 ))
            '000000000000000000000000000000000
        End If
        if TableCreated then
        'еще много кода
        end if

    Else
        'MsgBox "Не нашел таблицу " & node.Attributes.Item(1).Text & " среди справочников!"
    End If
    Forms("Enter").ProgressBar1.Value = Forms("Enter").ProgressBar1.Value +  1 

    tbl = Null
Next
[/quot]
...
Рейтинг: 0 / 0
Глупый вопрос про цикл FOR
    #36544057
Marianna-sec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем за интересные предложения :)
...
Рейтинг: 0 / 0
Глупый вопрос про цикл FOR
    #36545769
motorway
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня тоже когда было желание вставить continue, но потом мне посоветовали просто формировать нужным способом само условие if. Тогда автоматически перейдет на следующую итерацию
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Глупый вопрос про цикл FOR
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]