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

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

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

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

metka:
Next i
...
Рейтинг: 0 / 0
25.03.2010, 18:42
    #36543139
Marianna-sec
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глупый вопрос про цикл FOR
не очень хорошо отношусь к goto. неужели ничего больше не предусмотрено, что реализовывало тот же механизм, то не содержало фразы goto? :(
...
Рейтинг: 0 / 0
25.03.2010, 18:44
    #36543144
zchvv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глупый вопрос про цикл FOR
GoTo в этом контексте Вам ничем не навредит. Суха теория, а древо жизни пышно зеленеет.
...
Рейтинг: 0 / 0
25.03.2010, 18:47
    #36543146
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глупый вопрос про цикл FOR
> Автор: 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
25.03.2010, 18:52
    #36543159
Marianna-sec
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глупый вопрос про цикл FOR
Игорь Горбонос,
А Вы можете привести пример?
...
Рейтинг: 0 / 0
25.03.2010, 18:58
    #36543171
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глупый вопрос про цикл FOR
> Автор: Marianna-sec
> Игорь Горбонос,
> А Вы можете привести пример?

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

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
25.03.2010, 19:21
    #36543216
Глупый вопрос про цикл FOR
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
25.03.2010, 20:05
    #36543269
Marianna-sec
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глупый вопрос про цикл FOR
Отсюда, наверное, кроме как 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
25.03.2010, 21:29
    #36543328
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глупый вопрос про цикл FOR
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
25.03.2010, 22:23
    #36543386
Marianna-sec
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глупый вопрос про цикл FOR
функция 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
25.03.2010, 22:38
    #36543401
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глупый вопрос про цикл FOR
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
25.03.2010, 22:55
    #36543416
Marianna-sec
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глупый вопрос про цикл FOR
мм, спасибо, вариант похожий, но тем не менее интересный.
и fso я правда объявляла зря, видимо что-то было раньше
...
Рейтинг: 0 / 0
26.03.2010, 00:26
    #36543500
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глупый вопрос про цикл FOR
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
26.03.2010, 11:30
    #36544057
Marianna-sec
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глупый вопрос про цикл FOR
Спасибо всем за интересные предложения :)
...
Рейтинг: 0 / 0
26.03.2010, 23:31
    #36545769
motorway
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глупый вопрос про цикл FOR
У меня тоже когда было желание вставить continue, но потом мне посоветовали просто формировать нужным способом само условие if. Тогда автоматически перейдет на следующую итерацию
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Глупый вопрос про цикл FOR / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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