Обработка данных определенного вида

Программирование на Visual Basic for Applications
LA_
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 10.10.2008 (Пт) 13:14

Обработка данных определенного вида

Сообщение LA_ » 11.01.2009 (Вс) 15:41

Имеется у меня определенный тип данных:

имя1 число11 число12
имя2 число21 число22
имя3 число31 число32
...
имяN числоN1 числоN2


Все числа по умолчанию равны 0.
При работе программы будет необходимо при обращении по имени увеличивать одно из чисел (т.е. например при вызове Sub(имя3, 1) должно увеличиваться число31 на единицу).

Как лучше организовать хранение этих данных и обращение к ним, если результат потом нужно будет вывести в Excel?
Сделать ли лучше массив или сразу данные хранить-обрабатывать в ячейках Excel'a?

Имен будет достаточно много, где-то 500-1000. Операцию увеличение чисел надо будет делать еще большее количество раз - ~100000.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Обработка данных определенного вида

Сообщение alibek » 11.01.2009 (Вс) 16:11

Числа будут целыми или вещественными?
Максимальное значение числа?
Lasciate ogni speranza, voi ch'entrate.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Обработка данных определенного вида

Сообщение Денис » 11.01.2009 (Вс) 16:48

Сделать класс. Там и инкремент будет и сохранение.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

LA_
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 10.10.2008 (Пт) 13:14

Re: Обработка данных определенного вида

Сообщение LA_ » 11.01.2009 (Вс) 16:54

Числа будут целыми.
Максимальное значение числа - ~100000

Про классы в VBA сейчас посмотрю...
Спасибо!

LA_
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 10.10.2008 (Пт) 13:14

Re: Обработка данных определенного вида

Сообщение LA_ » 11.01.2009 (Вс) 17:33

наверное, я что-то не так делаю -
создал класс Sender:
Код: Выделить всё
Public Name As String ' имяN
Private To_ As Integer ' числоN1
Private CC As Integer ' числоN2

Public Sub SenderInit(Optional PName As String = "", Optional PTo_ As Integer = 0, Optional PCC As Integer = 0)
    Name = PName
    To_ = PTo_
    CC = PCC
End Sub

и сам код:
Код: Выделить всё
Dim senders(3) As New Sender
senders(1).SenderInit "ya", 1, 2 ' для пробы

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


Поясню, что я делаю - в Outlook'е нужно просмотреть все письма и составить список адресатов, от которых они приходили. Причем для каждого адресата (который в списке должен быть только один раз) надо посчитать кол-во писем, где получатель стоит в графе To и где получатель стоит в графе CC (копия).

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Re: Обработка данных определенного вида

Сообщение RayShade » 11.01.2009 (Вс) 18:16

Та дамм! А почему бы не сделать так:

Код: Выделить всё
dim mydata as new collection
mydata.add(new sender(x,y,name),name)


И потом уже просто проверять

Код: Выделить всё
mydata.item(name).cc
I don't understand. Sorry.

LA_
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 10.10.2008 (Пт) 13:14

Re: Обработка данных определенного вида

Сообщение LA_ » 13.01.2009 (Вт) 17:00

код
Код: Выделить всё
mydata.add(new sender(x,y,name),name)

не работает :(

работает код вида
Код: Выделить всё
mydata.Add New Sender, "name"

но как присвоить значения?
Код: Выделить всё
mydata.Item("name").Name = "name"

работает,
а вот
Код: Выделить всё
mydata.Item("name").To_ = 1

почему-то нет

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Обработка данных определенного вида

Сообщение alibek » 13.01.2009 (Вт) 17:11

Сделай класс, у которого будут свойства Номер, Имя, Число1, Число2.
Создай класс-коллекцию, в которую будут добавляться инстансы первого класса; ключом коллекции будет являться Имя.
У класса-коллекции добавь специальный метод, который будет искать (обращением по ключу) запись и при ее отсутствии добавлять новый, одновременно увеличивая счетчик.
Lasciate ogni speranza, voi ch'entrate.

LA_
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 10.10.2008 (Пт) 13:14

Re: Обработка данных определенного вида

Сообщение LA_ » 13.01.2009 (Вт) 17:19

разобрался... переменные в классе были заданы как Private

LA_
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 10.10.2008 (Пт) 13:14

Re: Обработка данных определенного вида

Сообщение LA_ » 13.01.2009 (Вт) 17:28

который будет искать (обращением по ключу) запись и при ее отсутствии добавлять новый, одновременно увеличивая счетчик

правильно я понимаю, что у коллекции нет метода для проверки наличия элемента с определенным ключом? чтобы сразу знать надо ли использовать Add или надо увеличить счетчик?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Обработка данных определенного вида

Сообщение alibek » 14.01.2009 (Ср) 8:54

У VBA.Collection нет. Но такой метод нетрудно написать самому.
Проверка есть в Scripting.Dictionary, но использовать данный объект — избыточно.
Lasciate ogni speranza, voi ch'entrate.


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 20

    TopList