|
Работа с многомерными массивами строк (VB.Net)
|
|||
---|---|---|---|
#18+
С массивами особо не работал, и в VB6 тоже. С многомерными вообще не работал. Поэтому сижу и малость туплю. С одномерным как-то так: Код: vbnet 1. 2. 3. 4. 5. 6.
Ну вроде работает, выводит "section". С двумерным, порыв всякие поиски наваракал типа: Код: vbnet 1. 2. 3. 4. 5. 6.
Ну и еще до компиляции пишет "Число индексов больше числа измерений индексированного массива." Как правильно записать и обращаться? ===== Что я вообще хочу... Для языковых настроек программы использую такую конструкцию, грубо: 1) набор из нескольких ini файлов 2) в каждом ini несколько секций 3) в каждой секции несколько параметров со значениями Кухню эту с механизмами чтения из ini я в целом сделал. Но счас хочу сделать некую конструкцию в программе, которая позволит восстанавливать "дефолт". Т.е. я хочу статически прописать всю "карту" файлы-секции-названия параметров-их дефолтные значения на английском при помощи массивов (в отдельном модуле), а м.б. даже и одного многомерного, чтобы иметь возможность обращаться к этой конструкции. С целью например сгенерировать дефолтный файл, или например нормализовать имеющийся файл (скажем, если параметр отсутствует, добавить его и заполнить имеющимся значением). Границы массивов не задавать, если добавляю новые файлы, параметры, секции ну и иметь возможность их легко добавлять в шаблон (правкой определений массивов) при развитии программы. Как-то так.... Ну и насколько эта идея имеет право на жизнь. (общий размер папки с реальными английскими ini сейчас = 211КБ), если грузить все это в прогу "массивами", то не рискую ли сожрать память, перегрузить прогу и т.п. В принципе я могу "хранить карту" в "зарезервированной" папке с реальными ini и обращаться к ней при необходимости, но это "ненадежно" (некто взял и удалил файлы, или стер параметры, или исправил их значения и т.п.) , хотелось бы все же инкапсулировать в код. Какие соображения? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2015, 16:32 |
|
Работа с многомерными массивами строк (VB.Net)
|
|||
---|---|---|---|
#18+
Ну, с двумерным вроде так: Код: vbnet 1. 2. 3. 4. 5. 6. 7.
А если хочу 3-х мерный? Который бы описывал Код: vbnet 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2015, 17:29 |
|
Работа с многомерными массивами строк (VB.Net)
|
|||
---|---|---|---|
#18+
Дмитрий77Что я вообще хочу... Для языковых настроек программы использую такую конструкцию, грубо: 1) набор из нескольких ini файлов 2) в каждом ini несколько секций 3) в каждой секции несколько параметров со значениями Ну и сделайте несколько классов, а не занимайтесь ерундой с массивами и индексами ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2015, 18:36 |
|
Работа с многомерными массивами строк (VB.Net)
|
|||
---|---|---|---|
#18+
Дмитрий77, я бы использовал Dictionary Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2015, 05:06 |
|
Работа с многомерными массивами строк (VB.Net)
|
|||
---|---|---|---|
#18+
[quot Cat2]Дмитрий77Ну и сделайте несколько классов, а не занимайтесь ерундой с массивами и индексами Несколько классов или несколько функций - это значит несколько громоздских функций, в каждой из которых я по сути должен ручками прописать действие для каждого параметра в ini файле. А потом еще не забыть править каждого монстра при добавлении новых параметров. Если я использую "карту-массив", вшитую в прогу, то я могу итти по ней по циклу Код: vbnet 1. 2. 3.
Дописываю в коде если надо только элементы массива удобным образом, сами же функции не меняются. Во втором посте у меня конечно не многомерный, а массив массивов, разобрался. Но в принципе оно устроит. bazile, может ты не понял но у меня не по ini-файлу на каждый язык, а набор из этак 10 ini на каждый язык, примерно соответствует отдельным модулям (каждый набор в своей папке), не рискнул использовать один большой. Словарь наверно не хочу, тем более там кажется только линейно параметр-значение ============= Короче я хочу сделать так. По одному массиву на каждый ini-файл, объявляю так, с инициализацией (массив 3-х мерных массивов по сути): Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9.
Любая ф-ция которая будет с этим работать будет выглядеть примерно так: Код: vbnet 1. 2. 3. 4. 5. 6.
Править эту конструкцию в коде если надо в этом виде очень легко (в одном месте). Меня здесь как всегда беспокоит следующее. Общий размер моих реальных ini как я упомянул около 200-250КБ. Если я пишу эту конструкцию как public с инициализацией моего большого количества элементов, то надо думать у меня программа при старте сожрет память под эти массивы, т.е. сравнимую с указанным объемом надо думать. Это не много или таки спички? Счас глянул через диспетчер задач, у меня один .Net-модуль в среднем при старте жрет 10000 K -15000 K Наверно спички, но стоит ли так транжирить? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2015, 18:05 |
|
Работа с многомерными массивами строк (VB.Net)
|
|||
---|---|---|---|
#18+
Дмитрий77, Вообще-то лучше бы вы сразу начинали с бест-практик, а не изобретали свои треугольные велосипеды https://msdn.microsoft.com/ru-ru/library/h6270d0z(v=vs.110).aspx ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2015, 07:38 |
|
Работа с многомерными массивами строк (VB.Net)
|
|||
---|---|---|---|
#18+
Cat2, Обсуждали пару месяцев назад. У меня механизм добавления произвольного языка, а не пара языков тупо зашитых в ресурсы (где этой парой все и ограничено). Поэтому не подходит. Ну в целом рутинную работу я более менее аккуратно сделал. То что доделываю сейчас это уже детали. Массивы-карту уже нарисовал. Пришлось написать маленькую вспомогательную утилиту, которая мне их нарисовала, за счет чего съекономил недели думаю 2. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2015, 09:59 |
|
Работа с многомерными массивами строк (VB.Net)
|
|||
---|---|---|---|
#18+
Дмитрий77У меня механизм добавления произвольного языка, а не пара языков тупо зашитых в ресурсы (где этой парой все и ограничено). Можно сказать, что это у Вас все тупо зашито в древние ини-файлы, которые уже 20 лет не используются в приличных программах. Откуда Вы взяли, что "пару" ? В таблице культур что-то около 200 языков. Вы придумали свой способ локализации, который Вам кажется остроумным и быстрым. Возможно он действительно прекрасен. Вот только локализация не ограничивается переводом строк. Как Вы будете решать проблемы с календарем, представлением дат и чисел? Направлением письма? Конечно, для хелловорда все это не надо, но все же? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2015, 10:45 |
|
Работа с многомерными массивами строк (VB.Net)
|
|||
---|---|---|---|
#18+
Ах да. Критикуя предлагай. Предлагаю использовать для хранения не ини-файлы, а один конфиг на XML, что бы использовать все плюшки от Linq to XML и от контрола PropertyGrid ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2015, 11:11 |
|
Работа с многомерными массивами строк (VB.Net)
|
|||
---|---|---|---|
#18+
Дмитрий77bazile, может ты не понял но у меня не по ini-файлу на каждый язык, а набор из этак 10 ini на каждый язык, примерно соответствует отдельным модулям (каждый набор в своей папке), не рискнул использовать один большой. Это не имеет значения. Структуру словаря можно сделать любой. Единственное что я не учел это значение по умолчанию для параметра, но это легко решается заменой значения на пару значений в виде массива. Дмитрий77Любая ф-ция которая будет с этим работать будет выглядеть примерно так: Код: vbnet 1. 2. 3.
Если ты собираешься циклом искать значение по имени, то тут хештаблица прямо таки просится т.к. она оптимизирована под быстрый поиск по ключу, которым в данном случае служит имя параметра. Дмитрий77 Это не много или таки спички? Само по себе немного, но если есть возможность съэкономить то лучше ей воспользоваться. Например, загружать данные для локализации по мере открытия окон которым она нужна. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2015, 11:38 |
|
Работа с многомерными массивами строк (VB.Net)
|
|||
---|---|---|---|
#18+
bazileЕсли ты собираешься циклом искать значение по имени, то тут хештаблица прямо таки просится т.к. она оптимизирована под быстрый поиск по ключу, которым в данном случае служит имя параметра. Не, речь идет исключительно о линейных обслуживающих тупых процедурах. Например код ниже пишет целиком ini-файл из дефолтного массива-карты (массив трехмерных массивов секция-имя_параметра-значение): Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Это(код выше) очень быстро работает, уже проверил. Кстати в данном случае гораздо быстрее чем если писать каждый параметр через ini-ф-ции (код ниже): Код: vbnet 1. 2. 3.
Вторая задача, это когда например есть уже реальный ini (с русскими напр. а не дефолтными значениями), но что-то там почему-то пропущено, например какие-то параметры отсутствуют или последовательность секций-параметров сильно запутана. Т.е. надо выстроить секции-параметры по шаблону и записать вместо отсутствующих параметров дефолтные английские. Опять же линейный быстрый цикл. Или аналогично, отобразить пары параметр-значение в интерфейсе, где пользователь может править "язык" - в правильной удобочитаемой последовательности. Для этого и нужна упорядоченная "карта-массив"(словарь или массив думаю не принципиально), где в отличии от реального ini где последовательность секций и параметров внутри секции не играют роли, API ф-ции ведь пишут в ini хаотически (новую секцию в конец файла, новый параметр в конец секции) и сортировками не занимаются. Ну а достать из ini конкретное значение конкретного параметра - на это есть стандартные ф-ции работы с ini - но об этом речь не идет. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2015, 00:31 |
|
Работа с многомерными массивами строк (VB.Net)
|
|||
---|---|---|---|
#18+
Дмитрий77(массив трехмерных массивов секция-имя_параметра-значение) Зачем трехмерный массив? В данном случае ключ это {секция, имя_параметра}. Создать отдельный класс IniKey{String, String} и объекты этого класса использовать в качестве ключа. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2015, 07:21 |
|
Работа с многомерными массивами строк (VB.Net)
|
|||
---|---|---|---|
#18+
Dima TДмитрий77(массив трехмерных массивов секция-имя_параметра-значение) Зачем трехмерный массив? Я неправильно "выразился". Массив, каждый элемент которого есть массив из 3-х элементов о чем писал выше. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2015, 11:14 |
|
Работа с многомерными массивами строк (VB.Net)
|
|||
---|---|---|---|
#18+
[quot Дмитрий77]Ну, с двумерным вроде так: Код: vbnet 1. 2. 3. 4. 5. 6. 7.
это - не двумерный массив вообще. Это - массив массивов. Все тут разжевано. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2015, 10:15 |
|
|
start [/forum/topic.php?fid=20&fpage=72&tid=1401015]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
45ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
105ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 201ms |
0 / 0 |