Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Создать массив / 17 сообщений из 17, страница 1 из 1
13.01.2005, 13:52:58
    #32863181
kika
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать массив
Всем привет!!
Народ, помогите создать процедуру, которая добавляет в массив каждую входящую переменную (Name) до тех пор, пока еще один входящий параметр (ID) у всех одинаковый.... Если ID новый, то массив обнуляем и начинаем новый...
...
Рейтинг: 0 / 0
13.01.2005, 14:25:50
    #32863280
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать массив
Что то вроде этого

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
public Sub a(NEwID as integer, Name as string) 

static ID as integer
static iCounter as interger
Dim myarr() as string

if NEwId = ID THen
	ID = NEwID
	clear myarr
	iCounter =  0 
End if


Redim Preserve myarr(iCounter)
myarr(iCounter) = Name
iCounter = iCounter+ 1 

End Sub

Извини, писал в ноутподе, бейсика сейчас под рукой нет, поэтому может придется кое что подкрутить.


Magnus
...
Рейтинг: 0 / 0
13.01.2005, 16:32:35
    #32863656
kika
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать массив
Делаю следующим образом:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Public Sub GenerateTown(NEwID, Name)

Dim ID, iCounter
Dim myarr()

if NEwId = ID Then
	ID = NEwID
	clear myarr
	iCounter =  0 
End if

Redim Preserve myarr(iCounter)
myarr(iCounter) = Name
iCounter = iCounter+ 1 
MsgBox(join(myarr, " "))
End Sub

Почему-то у меня в MsgBox не выводится все данные массива, у который NEwID одинаковый....
У меня в MsgBox попадает только последнее значение...
Подскажите, что тут не так?
Подскажите,
...
Рейтинг: 0 / 0
13.01.2005, 16:37:44
    #32863678
Дурак
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать массив
Почему в объявлении переменных не указаны типы?

Вам же человек показал, как правильно :-).

Так они объявляются как Variant, что не есть зашибись...
...
Рейтинг: 0 / 0
13.01.2005, 16:38:34
    #32863680
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать массив
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Public Sub GenerateTown(NEwID, Name)

Dim ID, iCounter
Dim myarr()

if NEwId <> ID Then
	ID = NEwID
	clear myarr
	iCounter =  0 
End if

Redim Preserve myarr(iCounter)
myarr(iCounter) = Name
iCounter = iCounter+ 1 
MsgBox(join(myarr, " "))
End Sub

Напуршил немного :). В условии знак "неравенство" должен быть.

Magnus
...
Рейтинг: 0 / 0
13.01.2005, 16:56:34
    #32863701
Дурак
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать массив
авторOption Explicit

Dim iCounter As Long, id As Long
Dim myarr() As String

Private Sub Command1_Click()

id = 1
GenerateTown 1, "Áëèí"
GenerateTown 1, "Åùå áëèí"
GenerateTown 1, "Îïÿòü áëèí"
GenerateTown 2, "¨-ìî¸"

End Sub

Public Sub GenerateTown(NEwID, Name)

If NEwID <> id Then
MsgBox (Join(myarr, " "))
id = NEwID
Erase myarr
iCounter = 0
Else
ReDim Preserve myarr(iCounter)
myarr(iCounter) = Name
iCounter = iCounter + 1
End If
End Sub
...
Рейтинг: 0 / 0
13.01.2005, 16:58:42
    #32863710
Дурак
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать массив
Еще раз :-).

Каждый раз при вхождении в процедуру счетчик массива обнуляется... Вот одно слово и остается. Да и про неравенство точно... Ну и еще кое-что :-).

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
Option Explicit

Dim iCounter As Long, id As Long
Dim myarr() As String

Private Sub Command1_Click()

id =  1 
GenerateTown  1 , "Блин"
GenerateTown  1 , "Еще блин"
GenerateTown  1 , "Опять блин"
GenerateTown  2 , "Ё-моё"

End Sub

Public Sub GenerateTown(NEwID, Name)

If NEwID <> id Then
    MsgBox (Join(myarr, " "))
    id = NEwID
    Erase myarr
    iCounter =  0 
Else
    ReDim Preserve myarr(iCounter)
    myarr(iCounter) = Name
    iCounter = iCounter +  1 
End If
End Sub

...
Рейтинг: 0 / 0
13.01.2005, 16:58:47
    #32863711
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать массив
Во, точно :). Erase перепутал и Esle забыл :)

Magnus
...
Рейтинг: 0 / 0
13.01.2005, 17:32:21
    #32863805
kika
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать массив
Огромная просьба!
Дурак (хотя похоже ты совсем не дурак),
а ты можешь написать небольшие коммертарии к этой функции, чтобы мне разобраться что где происходит!
...
Рейтинг: 0 / 0
13.01.2005, 17:44:49
    #32863837
kika
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать массив
Народ, а как мне поставить ограничение, что если Name уже такой существует в мессиве, то не записывать его повторно?
...
Рейтинг: 0 / 0
13.01.2005, 18:14:55
    #32863916
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать массив
Поможет функция:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Function Find_it_(ByVal Искомое As String) As Long
   Dim i As Long
   Find_it_ = - 1 
   For i = LBound(myarr) To ubound(myarr)
      If Искомое = myarr(i) Then
         Find_it_ = i
         Exit For
      End if
   Next
End Function
...
Рейтинг: 0 / 0
13.01.2005, 18:35:32
    #32863961
kika
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать массив
Почему-то выдается ошибка на эту строчку:
Код: plaintext
For i = LBound(myarr) To ubound(myarr)

Пишет: "Индекс выходит за предел допустимого диапазона 'LBound'"

Подскажите, что тут нужно подправить?
...
Рейтинг: 0 / 0
13.01.2005, 18:55:36
    #32863996
Дурак
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать массив
kikaОгромная просьба!
Дурак (хотя похоже ты совсем не дурак),
а ты можешь написать небольшие коммертарии к этой функции, чтобы мне разобраться что где происходит!


Спасибо за комплимент :-)!

По поводу разобраться - лучше всего
сделать форму, добавить туда кнопку, кликнуть на нее, добавить в модуль
формы весь текст и по F8 прогнать в Debugger'е - получишь неоценимый опыт :-). Ручаюсь - разберешься на 100%.


авторПишет: "Индекс выходит за предел допустимого диапазона 'LBound'"

Означает, что в массиве еще нет ни одного элемента.
Нужно сначала проверить, есть ли там элементы и не гонять функцию по пустому массиву...
...
Рейтинг: 0 / 0
13.01.2005, 19:03:31
    #32864005
Дурак
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать массив
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
' данная опция запрещает использование необъявленных переменных
Option Explicit

' объявление глобальных переменных
' счетчик, переменная для хранения последнего id
Dim iCounter As Long, id As Long
' массив
Dim myarr() As String

Private Sub Command1_Click()
' первоначальное значение id = 1
id =  1 

' добавляем элементы
GenerateTown  1 , "Блин"
GenerateTown  1 , "Еще блин"
GenerateTown  1 , "Опять блин"
GenerateTown  2 , "Ё-моё"

End Sub

Public Sub GenerateTown(NEwID, Name)
' если id не соответсвует старому - выводим результат и обнуляем массив
If NEwID <> id Then
    MsgBox (Join(myarr, " "))
    id = NEwID
    Erase myarr
    iCounter =  0 
Else ' иначе - добавляем в массив новый элемент
    ReDim Preserve myarr(iCounter)
    myarr(iCounter) = Name
    iCounter = iCounter +  1 
End If
End Sub
' все, я иссяк :-). И ухожу домой.
' да... забыл. Все удовольствие запускается по клику кнопки Command1
...
Рейтинг: 0 / 0
13.01.2005, 19:04:32
    #32864008
Дурак
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать массив
автор
Во, точно :). Erase перепутал и Esle забыл :)


Дык я же не в блокноте это делал :-)
...
Рейтинг: 0 / 0
14.01.2005, 11:52:39
    #32864709
kika
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать массив
Я делаю так:


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
Public Sub GenerateTown(NEwID, Name)
If NEwID <> id Then
    MsgBox (Join(myarr, " "))
    id = NEwID
    Erase myarr
    iCounter =  0 
Else
    ReDim Preserve myarr(iCounter)
    myarr(iCounter) = Name
    iCounter = iCounter +  1 
End If
End Sub



Function CheckTown (ByVal TownName)
   Dim i
   CheckTown = - 1 
   For i = LBound(myarr) To ubound(myarr)
      If TownName = myarr(i) Then
         CheckTown = i
         MsgBox (CheckTown)
         Exit For
      End if
   Next
End Function



Sub...
..............
Dim ParentName, ParentID

If len(Join(myarr, ""))> 0  Then
    If CheckTown(ParentName)= 0  then
         GenerateTown ParentID, ParentName
    End If
ElseIf len(Join(myarr, ""))= 0  Then
         GenerateTown ParentID, ParentName
End If
.............
End Sub


Но почему-то данные все равно дублируются...
В чем тут может быть проблема?
...
Рейтинг: 0 / 0
14.01.2005, 12:23:20
    #32864797
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать массив
Код: plaintext
1.
2.
3.
4.
'вместо
    If CheckTown(ParentName)=0 then
'надо
If CheckTown(ParentName) <  0  then
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Создать массив / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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