Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / цикл. бесконечнось не предел(с) / 25 сообщений из 37, страница 1 из 2
19.10.2011, 16:13
    #37489180
BelowZero
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл. бесконечнось не предел(с)
кусок из цикла:
Код: plaintext
1.
2.
3.
For z =  1  To mass.Count
'бла бла бла
Call mass.Remove(z)
next z
к примеру, mass.Count было равно 7, потом в цикле 1 переменная удалилась из цикла. нужно искать уже от 1 до 6, но цикл продолжает искать от 1 до 7 и выдаёт ошибку
...
Рейтинг: 0 / 0
19.10.2011, 16:17
    #37489188
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл. бесконечнось не предел(с)
Код: plaintext
1.
do
loop
...
Рейтинг: 0 / 0
19.10.2011, 16:27
    #37489206
BelowZero
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл. бесконечнось не предел(с)
Konst_One,

выполнять цикл пока не поменяется значение цикла? а потом?
...
Рейтинг: 0 / 0
19.10.2011, 16:52
    #37489280
andandrew
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл. бесконечнось не предел(с)
BelowZeroKonst_One,

выполнять цикл пока не поменяется значение цикла? а потом?

Посмотри наверное на это:
Код: plaintext
1.
2.
3.
4.
   Do While myNum >  10 
      myNum = myNum -  1 
      counter = counter +  1 
   Loop
...
Рейтинг: 0 / 0
19.10.2011, 17:14
    #37489324
TpaBka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл. бесконечнось не предел(с)
BelowZero,

For z = 1 To mass.Count
'бла бла бла
Call mass.Remove(1)
next z
...
Рейтинг: 0 / 0
19.10.2011, 19:10
    #37489515
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл. бесконечнось не предел(с)
For z = mass.Count to 1 Step -1
...
Рейтинг: 0 / 0
19.10.2011, 20:04
    #37489590
BelowZero
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл. бесконечнось не предел(с)
либо это не то, либо я не так объяснил задачу... вот более развёрнутая часть кода:
For z = 1 To mass.Count
For x = 0 To 6
If mass(z) = MSFlexGrid1.TextMatrix(x, 1) Then 'ошибка 5 инвалид процедуре кол о аргумент
If MSFlexGrid1.TextMatrix(x, 2) = "" Or MSFlexGrid1.TextMatrix(x, 2) = "?" Then
Call mass.Remove(z)
ooo = MSFlexGrid1.TextMatrix(x, 1)
Analiz
If popka = 0 Then
'баблабла код на пол страницы
end if
end if
end if
next x
next z
...
Рейтинг: 0 / 0
19.10.2011, 20:06
    #37489592
BelowZero
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл. бесконечнось не предел(с)
сори забыл оформить
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
For z =  1  To mass.Count
    For x =  0  To  6 
       If mass(z) = MSFlexGrid1.TextMatrix(x,  1 ) Then 'ошибка 5 инвалид процедуре кол о аргумент
          If MSFlexGrid1.TextMatrix(x,  2 ) = "" Or MSFlexGrid1.TextMatrix(x,  2 ) = "?" Then
          Call mass.Remove(z)
          'блаблаблаблабла
             If popka =  0  Then
             'баблабла код на пол страницы
             end if
          end if
       end if
    next x
next z
...
Рейтинг: 0 / 0
19.10.2011, 21:58
    #37489701
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл. бесконечнось не предел(с)
Для итерации по коллекции следует использовать ForEach.
Особенно (!!!) при удалении из неё. Потому как даже удаление "от хвоста" (for i = col.count-1 to 0 step -1) не гарантирует от проблем (связанных. впрочем, не с not found).
...
Рейтинг: 0 / 0
19.10.2011, 23:14
    #37489780
BelowZero
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл. бесконечнось не предел(с)
Akina,

спасяб, и правда, первые наброски кода работали именно при использовании фоич.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
For Each chlen In mass
    For x =  0  To  6 
        If chlen = MSFlexGrid1.TextMatrix(x,  1 ) Then
            If MSFlexGrid1.TextMatrix(x,  2 ) = "" Or MSFlexGrid1.TextMatrix(x,  2 ) = "?" Then
            Call mass.Remove(chlen.index) ' не помню, как правильно записать эту строчку, подскажите плз
          'блаблаблаблабла
             If popka =  0  Then
             'баблабла код на пол страницы
             end if
          end if
       end if
    next x
next chlen
...
Рейтинг: 0 / 0
19.10.2011, 23:27
    #37489792
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл. бесконечнось не предел(с)
AkinaДля итерации по коллекции следует использовать ForEach.
Особенно (!!!) при удалении из неё. Потому как даже удаление "от хвоста" (for i = col.count-1 to 0 step -1) не гарантирует от проблем (связанных. впрочем, не с not found).
На, побалуйся. Потом придешь и объяснишь увиденное.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Sub a()
    Dim r As Range
    Debug.Print ActiveSheet.UsedRange.Rows.Count
    For Each r In ActiveSheet.UsedRange.Rows
        Debug.Print r.Address
        r.Delete
    Next
    Debug.Print ActiveSheet.UsedRange.Rows.Count
End Sub
...
Рейтинг: 0 / 0
19.10.2011, 23:58
    #37489820
BelowZero
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл. бесконечнось не предел(с)
как правильно записать это строчку? 11469660
...
Рейтинг: 0 / 0
20.10.2011, 01:13
    #37489853
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл. бесконечнось не предел(с)
White OwlНа, побалуйся. Потом придешь и объяснишь увиденное.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Sub a()
    Dim r As Range
    Debug.Print ActiveSheet.UsedRange.Rows.Count
    For Each r In ActiveSheet.UsedRange.Rows
        Debug.Print r.Address
        r.Delete
    Next
 ' Отут явный баг, т.к пропущена строка сохранения файла, а без этого используемый диапазон остаётся без изменений. Не смотря на количество удалений. :-Q
' Ещё может понадобится переоткрытие файла. Только это особенности реализации от микрософта.
' Если ты о совпадающем числе строк.(макрос не запускал, винда далеко, утром попробую)
    Debug.Print ActiveSheet.UsedRange.Rows.Count
End Sub
...
Рейтинг: 0 / 0
20.10.2011, 01:16
    #37489856
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл. бесконечнось не предел(с)
BelowZeroкак правильно записать это строчку? 11469660
да как?
Сори , забыл оформить.( и тут смайлик бъющийся об стену )


какую строку?
...
Рейтинг: 0 / 0
20.10.2011, 08:41
    #37490005
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл. бесконечнось не предел(с)
White Owl , кроме того, посмотрите повнимательнее на название раздела.
...
Рейтинг: 0 / 0
20.10.2011, 11:01
    #37490237
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл. бесконечнось не предел(с)
AkinaДля итерации по коллекции следует использовать ForEach.
Особенно (!!!) при удалении из неё. Потому как даже удаление "от хвоста" (for i = col.count-1 to 0 step -1) не гарантирует от проблем (связанных. впрочем, не с not found).Это на каком таком уникальном опыте выведено столь бредовое утверждение?
...
Рейтинг: 0 / 0
20.10.2011, 15:17
    #37490792
BelowZero
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл. бесконечнось не предел(с)
блин хватит пипками мериться. Идеальный вариант с использованием for each, т.к. первые наброски моего кода работали при их использовании. не помню, как я удалял из коллекции нужный элемент.
Код: plaintext
1.
2.
For Each chlen In mass
[color=red]Call chlen.Remove[/color]
next chlen
подскажите
...
Рейтинг: 0 / 0
20.10.2011, 20:35
    #37491342
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл. бесконечнось не предел(с)
Тебе уже подсказали.
For Each при удалении использовать нельзя.
...
Рейтинг: 0 / 0
20.10.2011, 20:59
    #37491364
BelowZero
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл. бесконечнось не предел(с)
Antonariy,

эм... почему эт? никак нельзя удалить член коллекции зная его?... а как тада можно? про дулоп не очень догнал.
...
Рейтинг: 0 / 0
20.10.2011, 21:25
    #37491375
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл. бесконечнось не предел(с)
Потому что For Each может работать только с коллекцией неизменной во время перебора.
...
Рейтинг: 0 / 0
20.10.2011, 22:13
    #37491417
BelowZero
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл. бесконечнось не предел(с)
Antonariy,

как тогда?
...
Рейтинг: 0 / 0
20.10.2011, 22:14
    #37491419
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл. бесконечнось не предел(с)
...
Рейтинг: 0 / 0
21.10.2011, 15:43
    #37492543
BelowZero
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл. бесконечнось не предел(с)
да,
Код: plaintext
For z = mass.Count To  1  Step - 1 
работает, но некорректно. т.е. с каждым шагом он ищет в коллекции из n-1 элементов, но в ходе цикла могут быть удалены и 2, и 5, и 10 элементов, а могут быть вообще не удалены...
...
Рейтинг: 0 / 0
21.10.2011, 16:12
    #37492617
BelowZero
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл. бесконечнось не предел(с)
удалось решить за счёт
Код: plaintext
For z = mass.Count To  1  Step y
где я сам присваиваю значение
Код: plaintext
y
во время цикла. пока что воюю с остальными сложностями циклов...
...
Рейтинг: 0 / 0
21.10.2011, 16:35
    #37492703
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл. бесконечнось не предел(с)
> Автор: BelowZero
> For z = mass.Count To 1 Step yгде я сам присваиваю значение


Пипец! (с)
Там обрыв! Туда нельзя! Но Вам можно. (с)
Чак Норис досчитал до бесконечности. Дважды.

Зачем тебе изменять значение шага цикла? Ты идеш в цикле с конца коллекции и за раз удаляешь ОДИН елемент, при следующей
итерации индекс будет меньше на один и в коллекции БУДЕТ елемент по этому индексу. Что не так? Показывай полный код, и
расказывай что нужно делать

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / цикл. бесконечнось не предел(с) / 25 сообщений из 37, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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