есть ли функция в VB, размера масива?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
LionK
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 11.10.2005 (Вт) 1:59

есть ли функция в VB, размера масива?

Сообщение LionK » 05.12.2008 (Пт) 14:27

написал сохранение/загрузку данных сначала в ИНИ, работало довольно быстро ,пока размер был малинький, потом начал сохранять в своём формате, загрузка происходит быстро, а вот сохранение медленно. загрузка происходит сначала в переменную типа стринг, а потом распихивается в динамический масив, а сохранение происходит наоборот из масива берутся данные и добавляются к переменной, я думаю что постоянное расширение памяти под увеличевающуюся переменную и тормозит, вопрос такой: есть ли функция возвращающая полный размер масива или скока он памяти занимает...
ну, думаю понятно ообъяснил7

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: есть ли функция в VB, размера масива?

Сообщение Antonariy » 05.12.2008 (Пт) 14:35

Размер массива — UBound(arr)
Лучший способ понять что-то самому — объяснить это другому.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: есть ли функция в VB, размера масива?

Сообщение tyomitch » 05.12.2008 (Пт) 14:51

UBound(arr)-LBound(arr)+1
раз уж на то пошло
Изображение

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: есть ли функция в VB, размера масива?

Сообщение Debugger » 05.12.2008 (Пт) 16:29

А если массив пустой?
If (not (arr))=-1 Then Msgbox "Массив не проиницализован"

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: есть ли функция в VB, размера масива?

Сообщение Хакер » 06.12.2008 (Сб) 16:20

Глупо. Надо писать два раза Not, чтобы компилятор их оптимизировал, и убрал, и сравнивать не с Not 0, а с 0.

А вообще GSerg говорил, что эта фича (которая на самом деле глюк) работает не всегда.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: есть ли функция в VB, размера масива?

Сообщение Debugger » 06.12.2008 (Сб) 18:31

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

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: есть ли функция в VB, размера масива?

Сообщение Хакер » 06.12.2008 (Сб) 18:37

Есть, и не один. И документированные, и менее документированные.

Но в посте содержится ещё и мысль о том, что надо два раза писать Not, которую ты проигнорировал.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: есть ли функция в VB, размера масива?

Сообщение tyomitch » 06.12.2008 (Сб) 19:23

Хакер писал(а):Надо писать два раза Not, чтобы компилятор их оптимизировал, и убрал, и сравнивать не с Not 0, а с 0.

Это абстрактное предположение, или ты действительно проверял, как компилируются оба варианта?
Казалось бы, если компилятор достаточно умный, чтобы убрать два Not, он догадается и приведённый вариант развернуть.
Изображение

LionK
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 11.10.2005 (Вт) 1:59

Re: есть ли функция в VB, размера масива?

Сообщение LionK » 17.12.2008 (Ср) 22:24

наверно я не правильно объяснил, мне надо узнать не размерность масива а его размер занимающий NN-ое количество памяти чтобы сразу создать переменную с размером масива....
P.S. что-то мне отчёты не приходят на мыло, об ответах в теме.....
галочка стоит в "Сообщать мне о получении ответа"

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: есть ли функция в VB, размера масива?

Сообщение Хакер » 17.12.2008 (Ср) 22:26

А мы тебе и предлагаем способ узнать размер, а вовсе не размерность.

(Уведомление пришло?)
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

LionK
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 11.10.2005 (Вт) 1:59

Re: есть ли функция в VB, размера масива?

Сообщение LionK » 17.12.2008 (Ср) 22:31

стоп, ubound возвращает верхнюю границу масива.....
а мне надо знать скока он весит в байтах...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: есть ли функция в VB, размера масива?

Сообщение Хакер » 17.12.2008 (Ср) 23:36

Тогда всё намного хуже.

Тебе надо знать, сколько массив занимает памяти (в байтах). Чтобы говорить о таких вещах, тебе надо знать, как вообще массивы хранятся в памяти.

Но ты этого не знаешь. Потому что если бы знал, ответ на вопрос был бы тебе очевиден.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

LionK
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 11.10.2005 (Вт) 1:59

Re: есть ли функция в VB, размера масива?

Сообщение LionK » 18.12.2008 (Чт) 0:32

так потому и спрашиваю.... еслиб знал, не спрашивал бы.... :D

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: есть ли функция в VB, размера масива?

Сообщение tyomitch » 18.12.2008 (Чт) 1:02

Хакер писал(а):Потому что если бы знал, ответ на вопрос был бы тебе очевиден.

Ну да прямо. А вдруг там UDT, строки, варианты и вся остальная нечисть.
Изображение

LionK
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 11.10.2005 (Вт) 1:59

Re: есть ли функция в VB, размера масива?

Сообщение LionK » 18.12.2008 (Чт) 1:16

ну зачем гадать что за масив.. вот он, полная структура
Код: Выделить всё
Public Stars() As Star

Public Type bld
    sName As String
    sNumber As Long
End Type

Public Type ress
    resurs As Boolean
    ruda As Long
    metal As Long
    kript As Long
    spice As Long
End Type

Public Type SpySys
    res As ress
    builds() As bld
    def() As bld
    flot() As bld
    labs() As bld
    ssTime As Date
    chance As Integer
    isOk(4) As Boolean
End Type

Public Type Star
    isPl As String
    IDplanet As Long
    plName As String
    puncts As Long
    status As Stats
    usName As String
    position As String
    res As ress
    spy As SpySys
    Aliaz As String
End Type

Public Enum Stats
    off = 0
    war = 1
    big = 2
    alz = 3
    wyh = 4
    otr = 5
End Enum

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: есть ли функция в VB, размера масива?

Сообщение Viper » 18.12.2008 (Чт) 8:10

Вот как раз и нечисть в полном комплекте. Особенно учитывая наличие строк в структурах.
Весь мир матрица, а мы в нем потоки байтов!

M.A.R.K
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 68
Зарегистрирован: 11.11.2007 (Вс) 11:50
Откуда: Иркутск

Re: есть ли функция в VB, размера масива?

Сообщение M.A.R.K » 18.12.2008 (Чт) 12:21

LionK, ну если он тебе заранее известен...то попробуй посчитать на кальнуляторе. :D
-Решил Хакер блины печь...
-Первый блин у него вышел, как обычно - Комом...
-А второй - Экзешником...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: есть ли функция в VB, размера масива?

Сообщение Хакер » 18.12.2008 (Чт) 13:58

Ну да прямо. А вдруг там UDT, строки, варианты и вся остальная нечисть.

Я это (но не только) и имел в виду. Что автор, во-первых, не указал, считать или не считать SA-дескриптор, а, во-вторых, не указал, как поступать с указателями — считать их за 4 байта, или считать данные, на которые эти указатели ссылаются.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

LionK
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 11.10.2005 (Вт) 1:59

Re: есть ли функция в VB, размера масива?

Сообщение LionK » 22.12.2008 (Пн) 10:25

Я это (но не только) и имел в виду. Что автор, во-первых, не указал, считать или не считать SA-дескриптор, а, во-вторых, не указал, как поступать с указателями — считать их за 4 байта, или считать данные, на которые эти указатели ссылаются.


я конечно сильно извиняюсь..... но я не настолько профессиональный программер..... я чисто для себя пишу програмулинки(чисто для помощи мне в той или иной задаче) и спросил есть ли функция в ВБ (просто я не знаю такой), а вы как обычно начали консилиум... просто я хочу ускорить сохранение массива(просто загрузка происходит 5сек, а сохранение 5мин), но если нужно его пересчитывать, то возможно это может только затормозить процесс....

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: есть ли функция в VB, размера масива?

Сообщение Хакер » 22.12.2008 (Пн) 12:38

В чём проблема? Почему так долго? Ты читаешь массив поэлементно?

И теперь хочешь сделать сохрение/загрузку за раз? Зачем при этом знать размер в байтах?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: есть ли функция в VB, размера масива?

Сообщение iGrok » 22.12.2008 (Пн) 14:22

Ещё раз вдумчиво вчитался в написанное в первом посте.

LionK, я правильно понимаю, что при сохранении массива ты последовательно проходишь по всей структуре, запихиваешь данные в строку (strsave = isPL + IDPlanet + ... ). Туда же в своём формате пишешь содержимое "вложенных" структур и массивов, а потом скидываешь эту строку в файл?

А при чтении наоборот, поднимаешь строку из файла, и рабираешь её, заполняя массив?

Или я что-то упустил?
label:
cli
jmp label

LionK
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 11.10.2005 (Вт) 1:59

Re: есть ли функция в VB, размера масива?

Сообщение LionK » 22.12.2008 (Пн) 14:29

iGrok , нет не упустил именно так....
только почему-то разница в скорости.....

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: есть ли функция в VB, размера масива?

Сообщение iGrok » 22.12.2008 (Пн) 18:09

Может быть, тебя устроит такой способ сохранения этой структуры?
viewtopic.php?f=1&t=38058
label:
cli
jmp label

LionK
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 11.10.2005 (Вт) 1:59

Re: есть ли функция в VB, размера масива?

Сообщение LionK » 24.12.2008 (Ср) 2:15

спасибо, может подойдёт.... проверю на выходных.....

LionK
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 11.10.2005 (Вт) 1:59

Re: есть ли функция в VB, размера масива?

Сообщение LionK » 19.01.2009 (Пн) 0:09

приведенный выше пример не подошёл, в VB нельзя сохранять масивы пользовательских типов. :(
мне пришлось дважды прогонять весь масив,
1. пересчитав размер каждого элемента
создав переменную str=space(count)
2.и повторно прогонять масив уже занося его данные mid(str,count,???)=
(если кому интерестно)

скорость сохранения сократилась, при размерности (5000+), до 2-3 секунд что примерно = скорости загрузки.......

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: есть ли функция в VB, размера масива?

Сообщение Andrey Fedorov » 19.01.2009 (Пн) 9:34

LionK писал(а):приведенный выше пример не подошёл, в VB нельзя сохранять масивы пользовательских типов. :(


Чего ради нельзя? Можно. Притом примитивно.

Код: Выделить всё
Option Explicit

Public Type MyType2
    s() As String
End Type

Public Type MyType1
    s As String
    r(4) As MyType2
End Type

Private Type MyType
    s() As MyType1
End Type

Public Sub Main()
    MySave
    MyLoad
End Sub

Private Sub MySave()
    Dim mt As MyType, iHFile As Integer


    ReDim mt.s(6)
    ReDim mt.s(2).r(2).s(7)
    mt.s(2).r(2).s(2) = "Проверочка 2"
    mt.s(2).r(2).s(5) = "Проверочка 5"
   
    iHFile = FreeFile
    Open "D:\Temp\my.ddd" For Binary As #iHFile
    Put #iHFile, , mt
    Close #iHFile
End Sub

Private Sub MyLoad()
    Dim mt As MyType, iHFile As Integer

    iHFile = FreeFile
    Open "D:\Temp\my.ddd" For Binary As #iHFile
    Get #iHFile, , mt
    Close #iHFile
   
    Debug.Print mt.s(2).r(2).s(2)
    Debug.Print mt.s(2).r(2).s(5)
End Sub
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

LionK
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 11.10.2005 (Вт) 1:59

Re: есть ли функция в VB, размера масива?

Сообщение LionK » 22.01.2009 (Чт) 0:48

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


Вернуться в Visual Basic 1–6

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 88

    TopList  
cron