powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Скользящий массив
16 сообщений из 16, страница 1 из 1
Скользящий массив
    #36105623
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеется два больших массива
Код: plaintext
1.
dim X( 100000 )
dim Y( 100000 )
Эти массивы напрямую не используются, а используются через малые
Код: plaintext
1.
dim x1( 2000 )
dim y1( 2000 )
Часть информации копируется в малые массивы,
Код: plaintext
1.
2.
3.
4.
i1= 121 
for i= 0  to  2000 
x1(i)=X(i+i1)
y1(i)=Y(i+i1)
Next 
и они, в свою очередь передаются объекту
Код: plaintext
1.
obj1.x=x1
obj1.y=y1
Т.е. малые массивы представляют собой как-бы скользящее окно которое передвигается вдоль большого и массива и предает данные в объект.
Хотелось-бы обойтись без копирования и напрямую передавать данные в объект из большого массива ( объект неизменяем ).
С указателями все это решалось бы просто. Здесь даже не знаю, возможно ли.
...
Рейтинг: 0 / 0
Скользящий массив
    #36105643
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы попробовал-бы сделать класс, который эмулировал-бы твоё скользящее окно. Перед передачей устанавливаются границы
окна и передавать объект окна, а обработку переделать с учетом того, что это объект окна, а не массив, потом границы
сдвигаются и процесс повторяется. Может быть даже обошлось-бы без дополнительных массивов.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Скользящий массив
    #36105759
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос
Я бы попробовал-бы сделать класс, который эмулировал-бы твоё скользящее окно. Перед передачей устанавливаются границы
окна и передавать объект окна, а обработку переделать с учетом того, что это объект окна, а не массив, потом границы
сдвигаются и процесс повторяется. Может быть даже обошлось-бы без дополнительных массивов.
Спасибо. Такой эмулирующий класс сделать несложно. Будет что-то вида Class.x(i) и Class.y(i)
Скользячка хорошая. Задаешь положение и ширину окна и все типа имеешь.
Но вот этот объект, кот obj1 , сам определяет размер переданного массива, т.е. способов указать размер не существует. Воспримет ли он такую конструкцию?
Код: plaintext
obj1.x=Class.x
К сожалению, попробовать это далеко не 5 мин. :(
...
Рейтинг: 0 / 0
Скользящий массив
    #36105862
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: YUBA
> Но вот этот объект, кот obj1, сам определяет размер переданного массива, т.е. способов указать размер не
> существует. Воспримет ли он такую конструкцию?
>
> obj1.x=Class.xК сожалению, попробовать это далеко не 5 мин. :(

я имел в виду переделать именно обработку внутри obj1. Что-бы он не сам определял размер, а получал из класса окна. и я
имел в виду что x в obj1 это должна быть переменная типа окна. И этот фрагмент будет выглядеть так:
Код: plaintext
1.
Set obj1.x = clsWindow
а внутри obj1 нужно скорректировать работу с x как с объектом


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Скользящий массив
    #36106391
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос
> Автор: YUBA
> Но вот этот объект, кот obj1, сам определяет размер переданного массива, т.е. способов указать размер не
> существует. Воспримет ли он такую конструкцию?
>
> obj1.x=Class.xК сожалению, попробовать это далеко не 5 мин. :(

я имел в виду переделать именно обработку внутри obj1. Что-бы он не сам определял размер, а получал из класса окна. и я
имел в виду что x в obj1 это должна быть переменная типа окна. И этот фрагмент будет выглядеть так:
Код: plaintext
1.
Set obj1.x = clsWindow
а внутри obj1 нужно скорректировать работу с x как с объектом
Невозможно. obj1 - неизменяем, это DLL. Что внутри никому неизвестно, кроме авторов. Сразу, скажу, что используется нештатно, т.е. взят из другой программы. Но работает и устраивает.
...
Рейтинг: 0 / 0
Скользящий массив
    #36106407
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос, Естественно, все коды не настоящие, только иллюстрация к проблеме.
...
Рейтинг: 0 / 0
Скользящий массив
    #36106455
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBA,

Используйте вместо массивов словари и сделайте свойство вашего класса типа словарь. Тогда через Let, Set сразу все и передадите вашему объекту.

Успехов
...
Рейтинг: 0 / 0
Скользящий массив
    #36106465
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: VladConn

Не Влад, это не получится, т.к. obj1 - это сторонний СОМ-объест, к внутренностям которого он не имеет доступа

2 YUBA
А вот воспользоватся советом
Влада
и попробовать копировать нужные участки массива можно попробовать


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Скользящий массив
    #36106507
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос
> Автор: VladConn
Не Влад, это не получится, т.к. obj1 - это сторонний СОМ-объест, к внутренностям которого он не имеет доступа
2 YUBA
А вот воспользоватся советом
Влада
и попробовать копировать нужные участки массива можно попробовать
Он и так копируется, в цикле, а хотелось бы ссылкой, типа (код неправильный)
Код: plaintext
1.
2.
3.
4.
5.
6.
dim X( 100000 )
dim Y( 100000 )
dim x1( 2000 )
dim y1( 2000 )
x1=Y( 123 )
y1=Y( 123 )
Примерно так это бы решилось с указателями.
Дурь конечно, и так все дышит.
...
Рейтинг: 0 / 0
Скользящий массив
    #36106559
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBA,
конечно, баловство всё это, но можно создать структуру SAFEARRAY и заполнить её так, чтобы она имела свои границы массива и указывала на данные (с произвольного места) существующего массива. В таком духе.
...
Рейтинг: 0 / 0
Скользящий массив
    #36106607
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
БенедиктYUBA,
конечно, баловство всё это, .... Безусловно. :) Но если проблемы с массивами решить, то с листов Екселя можно убрать большую часть информации. Иначе уже получается такой винегрет из массивов, скрытых листов, БД и пр. удовольствия и бесконечного копирования туда и обратно.
Там, в Екселе, и так все медленно, но пользовательский интерфейс уж оч хорош, отказаться невозможно. :)
...
Рейтинг: 0 / 0
Скользящий массив
    #36106835
SashaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты поставь задачу, возможно это можно решить не таким образом?
...
Рейтинг: 0 / 0
Скользящий массив
    #36106837
SashaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты поставь задачу, возможно это можно решить не таким образом?
...
Рейтинг: 0 / 0
Скользящий массив
    #36107500
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверняка можно решить и другими способами, но чтобы довести способ с формированием SAFEARRAY до чего-то, что можно пощупать руками:
Код: 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.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
'Описания см. по ссылке выше
Private Sub CreateWindowArray( _
   SourceArray() As Double, WindowArray() As Double, saWindow As SAFEARRAY1VT, _
   ByVal WindowPos As Long, ByVal WindowLBound As Long, _
   ByVal WindowLength As Long)
 Dim ppsaWindow As Long
 
 saWindow.vtType = VarType(SourceArray(LBound(SourceArray)))
 With saWindow.sa
    .cDims =  1 
    .fFeatures = FADF_HAVEVARTYPE Or FADF_FIXEDSIZE
    .cbElements = LenB(SourceArray(LBound(SourceArray)))
    '.cLocks = 1
    .pvData = VarPtr(SourceArray(WindowPos))
    With .rgsabound( 0 )
       .lLbound = WindowLBound
       .cElements = WindowLength
    End With
 End With
    
 ppsaWindow = ArrPtr(WindowArray())
 CopyMemory ByVal ppsaWindow, VarPtr(saWindow.sa), LenB(ppsaWindow)
End Sub

Private Sub ClearWindowArray(WindowArray() As Double)
 Dim ppsaWindow As Long
 ppsaWindow = ArrPtr(WindowArray())
 CopyMemory ByVal ppsaWindow,  0 &, LenB(ppsaWindow)
End Sub

Private Sub MoveWindowArray( _
   SourceArray() As Double, saWindow As SAFEARRAY1VT, _
   ByVal WindowPos As Long)
 saWindow.sa.pvData = VarPtr(SourceArray(WindowPos))
End Sub

Private Sub Test2()
 Dim X( 100 ) As Double
 Dim Y( 100 ) As Double
 Dim x1() As Double
 Dim y1() As Double
 Dim i As Long
 Dim sax1 As SAFEARRAY1VT
 Dim say1 As SAFEARRAY1VT
 
 'Заполнение больших массивов
 For i = LBound(X) To UBound(X)
    X(i) = i
 Next i
 For i = LBound(Y) To UBound(Y)
    Y(i) =  1  + i /  1000 
 Next i
 
 'Наложение "окон"
 CreateWindowArray X(), x1(), sax1,  40 ,  0 ,  21 
 CreateWindowArray Y(), y1(), say1,  32 ,  1 ,  10 
 
 'Использование "окон"
 For i = LBound(x1) To UBound(x1)
    Debug.Print i, x1(i)
 Next i
 For i = LBound(y1) To UBound(y1)
    Debug.Print i, Format$(y1(i), "0.000")
 Next i
 
 'Перемещение имеющегося "окна"
 MoveWindowArray X(), sax1,  13 
 
 'Использование перемещённого "окна"
 For i = LBound(x1) To UBound(x1)
    Debug.Print i, x1(i)
 Next i
 
 'Уничтожение "окон"
 ClearWindowArray x1()
 ClearWindowArray y1()
End Sub

Private Sub Command2_Click()
 Test2
End Sub
...
Рейтинг: 0 / 0
Скользящий массив
    #36108897
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бенедикт, Спасибо, в пон-к буду разбираться. Нет, наверно до среды, в воскресенье на дачу.
...
Рейтинг: 0 / 0
Скользящий массив
    #36118980
Сергеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
почитай "сущность массивов в VB" Гергерт эту статью видел на сайтах VBNet.ru,vbstreets.ru удачи в статье он ковыряется с указателями и в примере решает похожую задачку и еще раз удачи
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Скользящий массив
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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