![]() |
|
#1
|
||||
|
||||
|
Как программно получить массив из строки? что0то вроде implode.
Задача. Есть в определениях строка которая содержит перечень ид услуг(копаю ЖКХ). Он выглядит как строка значений разделенная точками с запятой. Заполняется пользователем в настройках ЖКХ. Служит для определения списка первоочередных услуг подлежаших оплате при частичной оплате извещения. В моменте оплаты нужно определить - есть ли в списке оплачиваемых услуг первоочередные и если есть то сначала гасить их. Видится следующий алгоритм. Преобразовать строку в массив, потом используя оператор ИЗ при пробежке выяснять статус начисления. Попробовал создать функцию Однако Код:
ФУНКЦИЯ *: ПолучитьМассивИзСтроки(СТРОКА:парам,разд)
ПолучитьМассивИзСтроки=""
ЦИКЛ ДЛЯ(сл=1,ВСЕГО_СЛОВ(парам,разд))
ПолучитьМассивИзСтроки!сл=СЛОВО(сл,парам,разд)
КОНЕЦ_ЦИКЛА
ЕСЛИ ВСЕГОМ(МасСлов)>0 ТО ПолучитьМассивИзСтроки=МасСлов КОНЕЦ_ЕСЛИ
КОНЕЦ_ФУНКЦИИ
пробовал сам идентификатор функции внутри представить как масив - снова засада. Как вернуть массив из функции? или только через глобальные переменные? типа Код:
ПЕРЕМ МассПервУслуг!
ФУНКЦИЯ ЛОГИКА: ПолучитьМассивИзСтроки(СТРОКА:парам,разд)
ПолучитьМассивИзСтроки=НЕТ
ЦИКЛ ДЛЯ(сл=1,ВСЕГО_СЛОВ(парам,разд))
МассПервУслуг!сл=СЛОВО(сл,парам,разд)
КОНЕЦ_ЦИКЛА
ЕСЛИ ВСЕГОМ(МассПервУслуг)>0 ТО ПолучитьМассивИзСтроки=ДА КОНЕЦ_ЕСЛИ
КОНЕЦ_ФУНКЦИИ
Ну и как бы повыяснять насчет многомерных массивов - коллекций данных? нет такой возможности? а то приходится плодить кучу одномерных массивов - в каждом своя "данная" типа масНазвУслуг!и - тут названия масИдУслуг!и - тут ид масСумУслуг!и - тут суммы Хотел как бы так Мас[ид]"назв" Мас[ид]"ид" ..... Мас[ид]"сум" все необходимые свойства коллекции , ну или массив объектов что ли... нет такой возможности?
__________________
Владимир из Владимира http://gcpo.ru Группа дилеров ИП в телеграмм https://t.me/+F-Axt4OtaqNlOGZi - присоединяйтесь по заявке Группа пользователей ИП в телеграмм - https://t.me/infopredp |
|
#2
|
||||
|
||||
|
Цитата:
А возможности обработки массивов с такими индексами есть разные. И по маске классно работает, и СЛОВО(номер_слова, инд, РР) выделяется. Для вашего случая по маске хорошо работать. Задайте только индекс так: Мас["назв" + РР + СТР(ид)], Мас["сум" + РР + СТР(ид)] А потом читайте в цикле: ЦИКЛ ДЛЯ (инд ИЗ Мас, "назв*") - выбираются названия, т.е. берутся все индексы, которые "начинаются" с набора букв "назв". или ЦИКЛ ДЛЯ (инд ИЗ Мас, "сум*") - выбираются суммы Кстати, можно строить индекс по-всякому, так тоже сработает: [СТР(ид) + РР + "назв"] и ЦИКЛ ДЛЯ (инд ИЗ Мас, "*назв*") маску можно строить и так: "назв" + РР + "*" и т.п. Попробуйте, поэкспериментируйте. Мне нравится. //=============== А для передачи массивов всегда использовал и глобальные переменные и неглобальные. Опять же создаем библиотеку, например, DLYA_PEREM.LIB, в ней описываем наши ПЕРЕМ и т.п.(т.е. только описание общих переменных). А потом везде в своем коде эту библиотеку подключаем. Если без ГЛОБАЛ, то всё опять же замечательно работает в профиле пользователя (в его текущем сеансе). Последний раз редактировалось GriAlex, 03.10.2014 в 20:52. |
|
#3
|
||||
|
||||
|
Цитата:
Можно через параметры-переменные, пример: Код:
ФУНКЦИЯ ШРИФТ РазбитьНаСтроки(СТРОКА: стр; ЧИСЛО: ширина; ПЕРЕМ СТРОКА: массив_строк[])
стр = стр + "."
позиция = 1
а = 1
наличие_переноса = НЕТ
кол_пробелов = 0
слово = ""
новая_позиция = 1
ЦИКЛ ДЛЯ (и = 1, ДЛИНА(стр))
ЕСЛИ ПОДСТР (стр, и, 1) ИЗ [" ", ",", "."] ТО
слово = ПОДСТР(стр, позиция, и - позиция + 1)
ширина_слова = ШИРИНА_СТРОКИ(слово)
кол_пробелов = кол_пробелов + 1
ЕСЛИ (ширина_слова > ширина) ТО
ЕСЛИ (кол_пробелов = 1) ТО
массив_строк!а = слово
а++
кол_пробелов = 0
позиция = и + 1
ИНАЧЕ
а++
наличие_переноса = ДА
массив_строк!а = ПОДСТР(стр, новая_позиция, и - новая_позиция + 1)
КОНЕЦ_ЕСЛИ
ИНАЧЕ
массив_строк!а = слово
КОНЕЦ_ЕСЛИ
ЕСЛИ наличие_переноса ТО
наличие_переноса = НЕТ
позиция = новая_позиция
КОНЕЦ_ЕСЛИ
новая_позиция = и + 1
КОНЕЦ_ЕСЛИ
КОНЕЦ_ЦИКЛА
массив_строк!а = ПОДСТР(массив_строк!а, 1, ДЛИНА(массив_строк!а)-1)
КОНЕЦ_ФУНКЦИИ
|
|
#4
|
||||
|
||||
|
А вот массивы в параметрах-переменных описывать ещё не пробовал. Оказывается, можно. Хорошо.
|
|
#5
|
|||
|
|||
|
Меня тоже это заинтересовало, попробую
|
|
#6
|
||||
|
||||
|
Апну темку.
Есть ли возможность вставить значение в массив не в конец? то есть не дописать а вставить или только через перезапись?
__________________
Владимир из Владимира http://gcpo.ru Группа дилеров ИП в телеграмм https://t.me/+F-Axt4OtaqNlOGZi - присоединяйтесь по заявке Группа пользователей ИП в телеграмм - https://t.me/infopredp |
|
#7
|
|||
|
|||
|
Так все зависит от ИНДЕКСА, какой поставим - там и будет стоять значение.
|
|
#8
|
|||
|
|||
|
Дополню. В ИП2 индексом массива может быть любая строка. Если задается числовой индекс, он преобразуется в строку. В конструкции ЦИКЛ ДЛЯ ( * ИЗ *) массив перебирается в алфавитном порядке индексов, так что как раз добавление элемента в конец массива - "очень частный случай".
|
|
#9
|
|||
|
|||
|
А каким образом передать массив в функцию?
|
![]() |
| Опции темы | Поиск в этой теме |
| Опции просмотра | |
|
|
Похожие темы
|
||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение |
| Перевод строки | vlad | Бухгалтерия | 2 | 04.04.2014 11:07 |
| Массив записей журнала | Михаил,Тверь | Общий | 1 | 27.01.2014 16:25 |