Форум разработчиков QlikView и Qlik Sense. Получи любые ответы на вопросы по QlikView и Qlik Sense в течении нескольких часов!
Вы не вошли.
Страницы 1
Добрый день!
Подскажите, пожалуйста, можно ли использовать итерационную ссылку процедуры на саму процедуру в QV?
Пример, который хочу реализовать,
таблица:
StrCd StrParams
1000 1100;1200;
1100 1150;1190;
1150 1110;1120;1130;
1190 1140;1160;1170;
1200 1210;1220;
в процедуру передаю строку rdStroka = '1100;1200;'
В результате хочу получить для строки 1000 итоговую строку ItgStr, состоящую только из детальных строк:
1110;1120;1130;1140;1160;1170;1210;1220;
знаю, какие строки являются детальными - конечными:
Let StrDetList = '1110;1120;1130;1140;1160;1170;1210;1220;';
ItgStr = '';
процедура:
SUB FIND_DET_ROWS(rdStroka)
Let i=;
For i = 1 To SubStringCount('$(rdStroka)',';')
Let PodStr = SubField('$(rdStroka)',';','$(i)');
If SubStringCount('$(StrDetList)','$(PodStr)') > 0 Then
Let ItgStr = '$(ItgStr)'&'$(PodStr)';
Else
CALL FIND_DET_ROWS('$(PodStr)'); //Можно ли так указывать?
EndIf
Next i;
ENDSUB
Заранее большое спасибо!
новичок в QlikView
Неактивен
Юлия, добрый день!
Да, вызывать в теле подпрограммы эту же подпрограмму можно.
По Вашему коду небольшие советы:
1. Вместо использования глобальной переменной StrDetList лучше передавайте ее в качестве второго параметра в подпрограмму. Это позволит использовать как созданную константу, так и любую другую строку (гибкость).
2. При поиске подстроки в строке лучше добавить знаки ';' слева и справа (в исходную строку также добавить знак ';' на первое место), тогда Вы обезопасите себя от возможных будущих ошибок. Например, в строке "100500;" подстрока "500" есть, но такого числа нет.
If SubStringCount('$(StrDetList)',';$(PodStr);') > 0 Then
3. Любые переменные, объявленные в теле подпрограммы являются глобальными и лучше их именовать так, чтобы не было совпадений с переменными вне этой подпрограммы (я лично добавляю префикс в виде наименования подпрограммы и знака '_' - в Вашем случае это "FIND_DET_ROWS_"). Иначе может произойти так, что подпрограмма изменит значение переменной, используемой в другой части скрипта (если их наименования совпадают). С параметрами подпрограммы все иначе. Параметры даже при несовпадении идентификаторов могут быть изменены, так как передаются по ссылке.
С уважением,
Орлов Олег
Редактировался Oleg Orlov (2016-01-21 15:16:29)
Неактивен
Добрый день!
Подскажите, пожалуйста, есть ли ограничение по длине строковой переменной в QV (например, StrDetList из предыдущего примера)?
Заранее спасибо!
новичок в QlikView
Неактивен
Здравствуйте, Юлия!
Не думаю, что есть. По крайней мере на практике с такой проблемой ни разу не сталкивался. Если и есть, то скорее всего этого ограничения хватит на реализацию любой практической задачи. В крайнем случае можно длинную строку всегда разбить на несколько более коротких, обрабатывая их итеративно.
С уважением,
Олег Орлов
Неактивен
Страницы 1
[ Сгенерировано за 0.007 сек, 8 запросов выполнено - Использовано памяти: 880.9 Кбайт (Пик: 985.32 Кбайт) ]