Страницы: Пред. 1 2
RSS
Изменить начало отсчета массива с 0 на 1
 
Цитата
Jack Famous написал:
в основном под Join это всё и подводил
счас проверить негде, но, емнип, для join важен одномерный массив, а размерность по барабану.
 
venrt,
есть в этом мире вещи, которые изменить нельзя. можно расстраиваться, негодовать, досадовать по этому поводу, но нужно принять их такими как есть и приспосабливаться (учитывать в своей деятельности)

Цитата
Jack Famous написал:
Вообще решил перейти на одномерные массивы с нуля для универсальности.
Цитата
Юрий М написал:
И в чём же универсальность? )
вопрос конечно резонный, но зачем выбивать почву из-под ног Jack Famous?
он только начал постигать сложность этого мира через универсальность одномерных массивов с нуля и тут.... такой коварный вопрос!  "стабильности нету!" (С) "Особенности национальной охоты"
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
а вообще, если задать вопрос так:
а Split может возвращать массив с начальным индексом 1, а не 0?
в след. сообщении ответ был бы:
нет, не может
и все! тема на этом исчерпана и не нужно в ней 30 сообщений, но почему-то написано "изменить начало отсчета массива с 0 на 1" и, понятно, тут понеслось...

это просто напоминание:
корретно сформулированный вопрос - это залог получения конкретного и точного ответа, без необходимости лопатить тонны бесполезных сообщений
Изменено: Ігор Гончаренко - 22.11.2018 13:09:09
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, ну ветка получилась достаточно полезная для меня, как минимум, ТС я так, что вопрос мой был задан вполне корректно.
 
понятно, что Вам абсолютно виднее в чем состоял Ваш вопрос, мои рассуждения здесь - это просто попытка угадать "а что же нужно было на самом деле"
потому что все знают, "что на самом деле все быват совсем не так, как в действительности!"
Изменено: Ігор Гончаренко - 22.11.2018 13:49:31
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Юрий М, ну на данный момент мне так удобно  и приемлимо по скорости  :) необходимости в нескольких столбцах в формк пока не возникало, а как надо будет - так и подумаю  ;)
Цитата
Михаил С.: важен одномерный массив, а размерность по барабану
вы, наверное, имели ввиду, что с нуля  :D спасибо)
Изменено: Jack Famous - 22.11.2018 13:36:28
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Допустим, нужно данными из ОДНОГО столбца заполнить ЛистБокс на форме: я забираю этот диапазон в двухмерный массив и скармливаю его Листбоксу: ListBox1.List=Arr. Всё!
Вы же пишете:
Цитата
..."всего-что-угодно" в одномерный массив с нуля
И что дальше?
Или мне нужно тот же массив выгрузить на лист - без проблем и без всякого транспонирования. Чем же Ваш способ преобразования сначала в одномерный, а потом выгрузка с транспонированием универсален? В чём прелесть? )
Согласен, что иногда нужен и одномерный, но, чтобы "всё что угодно в одномерный" - нонсенс.
 
Попробую спасти хоть одного кота. На сколько понял Джек ищет по всем столбцам. При определенных условиях так проще, но есть способы позволяющие искать и без склейки.
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
На сколько понял Джек ищет по всем столбцам
Нет, Джек из темы в тему ищет универсальный макрос на все случаи жизни ))
 
Jack Famous,
Из многомерного циклом в одномерный >затем в строковую переменную с помощью Join.
Цикл по многомерному с созданием строковой переменной.
В чем фишка засорять память лишним массивом?
По поводу примера не совсем понял?
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
Jack Famous написал:
есть столбец "справочник номенклатур"
Если нужно полное совпадение, то  словарем всегда практически проверяю, а тут неважно какой массив.
"Все гениальное просто, а все простое гениально!!!"
 
OFF
а вам не кажется, господа, что тема скатилась в оффтоп обсуждения моего метода?  :D (мааааленькой части огромной связки, если точнее)

меня устраивает на данный момент связка, благодаря которой всё работает. Предлагаю все вопросы об универсальности и скорости решить в более соответствующей теме. С тестами, нюансами использования и прочим  ;)
Изменено: Jack Famous - 22.11.2018 18:11:03
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
Михаил С. : важен одномерный массив, а размерность по барабану
вы, наверное, имели ввиду, что с нуля   спасибо)
я имел ввиду, что код
Код
Sub test()
    Dim a(5 To 10), S$, i&
    For i = 5 To 10
        a(i) = "Str" & i
    Next
    S = Join(a)
End Sub
вполне работоспособен
 
Михаил С., прошу прощения — я попутал размерность с количеством измерений  :)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Ответ на вопрос сообщения #1 темы (изменить начало отсчета массива с 0 на 1).
Как то давно Михаил MCH подсказал, что, если будущий массив не объявлять как массив,
а как переменную Variant (=безобъявления), то ReDim Preserve - сработает:
Код
Sub Test1()
''''    Dim arrP() As String
    Dim arrP
    Dim P
    P = "P20 P44 P64 P83"
    arrP = Split(P)
    ReDim Preserve arrP(1 To UBound(arrP) + 1)
End Sub
 
На свете много, друг Горацио, такого...
Владимир
 
Позволю себе высказать категорическое несогласие с сообщением #45.
Ибо при
Код
Dim arrP() As String

Split вообще работать не будет, ибо ему нужна переменная Variant, а в вышеизложенной редакции кода массив не изменится. Для изменения начала отсчета требуется два ReDim Preserve (изменить размерность, и изменить точку отсчета и размерность).
Код
Sub Test1()
'    Dim arrP() As String
    Dim arrP As Variant
    Dim P
    P = "P20 P44 P64 P83"
    arrP = Split(P)
    ReDim Preserve arrP(UBound(arrP) + 1)
    ReDim Preserve arrP(1 To UBound(arrP))
End Sub
 
RAN, непонятно. Я код С.М. проверил - работает.
+++
Цитата
RAN написал:
Ибо при
Dim arrP() As String
Split вообще работать не будет
Да ладно! :)
Код
Sub Test2()
    Dim arrP() As String
    Dim P
    P = "P20 P44 P64 P83"
    arrP = Split(P)
    Debug.Print LBound(arrP), Join(arrP)
End Sub
Изменено: JayBhagavan - 26.11.2018 18:35:03

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Цитата
RAN написал:
Позволю себе высказать категорическое несогласие с сообщением #45.
Я попробовал, получилось. :D
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
JayBhagavan написал:
проверил - работает.
Цитата
Nordheim написал:
Я попробовал, получилось.
Моя, однако, тоже пробовала... ;)
Изменено: RAN - 26.11.2018 19:07:05
 
RAN, Вы что-то путаете. Код в №45 не такой.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
С массивом String не работает, я с типом Variant делал.
"Все гениальное просто, а все простое гениально!!!"
 
Да, я сразу не обратил внимания.
Довложил тест.
И еще пара экспериментов.
 
Потестировал #45 в разных конфигурациях от 2003 до 2016 (32- и 64-). Везде работает так, как описано.
Вместе с тем, нельзя полагаться на этот "трюк", так как он противоречит документации.
Владимир
 
Владимир, т.е. вы утверждаете, что во всех случаях (включая W7\Of2010), вы получаете arrP(1 To 4)?
 
Я проверил 2003 Win XP, 2007 Win XP, 2016(32- ru) Win10, 2016(64- en) Win 10. "Середину" не проверял.
Допроверил Excel 2010(32- ru), Win7. Индексы от 1 до 4.
Изменено: sokol92 - 26.11.2018 19:58:22
Владимир
 
к #47
Цитата
RAN написал:
Split вообще работать не будет, ибо ему нужна переменная Variant
а разве не наоборот?

С кодом из #45 все работает действительно, если не задавать как массив изначально.
Спасибо.  
Страницы: Пред. 1 2
Наверх