Неофициальный форум пользователей Qlik Sense & Qlikview

Для разработчиков => Вопросы по Qlik Sense & QlikView => Тема начата: PadijVD от 19 марта 2016, 03:49:51

Название: Проверка папки на наличие файлов (Qlikview, Qlik Sense)
Отправлено: PadijVD от 19 марта 2016, 03:49:51
Добрый день форумчане!
Есть такая необходимость, проверить папку на наличие в ней файлов для загрузки, если есть файлы выполнить основной скрипт, если нет файлов то просто загрузить старые данные.
Вопрос заключается в том что как проверить папку на наличие файлов?
Название: Re: Проверка папки на наличие файлов
Отправлено: admin от 19 марта 2016, 10:08:50
Привет.
Для проверки на наличие файла используйте комбинацию функций len() и filesize().


SET vFileExists = if(len(FileSize($1)) > 0, 1, 0);
Название: Re: Проверка папки на наличие файлов
Отправлено: PadijVD от 19 марта 2016, 10:52:22
Привет!
Не могу понять как указать папку для проверки.
И оператор нужно использовать Let, а не Set или я не прав?
Название: Re: Проверка папки на наличие файлов
Отправлено: kvv от 21 марта 2016, 01:07:37
Цитата: PadijVD от 19 марта  2016, 10:52:22  
Привет!
Не могу понять как указать папку для проверки.
И оператор нужно использовать Let, а не Set или я не прав?

Привет.
Можно вот так:
Directory D:\QlikView\EachFiles;
Название: Re: Проверка папки на наличие файлов
Отправлено: PadijVD от 21 марта 2016, 07:09:00
Привет.
пробую так
//Директория хранения файлов
DIRECTORY d:\...\В Qlik\;

//Проверяем папку
LET vFileExists = if(len(FileSize($1))>0, 1, 0);

//Действие

if vFileExists=0 then
load
*
From D:\...\*.qvd (qvd);
exit script;
end if


В результате значение переменной всегда = 0

Название: Re: Проверка папки на наличие файлов
Отправлено: admin от 21 марта 2016, 07:11:49
Привет, сделайте проще
if len(filesize('путь'))>0 then
...
endif
Название: Re: Проверка папки на наличие файлов
Отправлено: PadijVD от 21 марта 2016, 09:25:03
Спасибо всем за помощь!
Сделал так:
Set a = 'd:\...\В Qlik\*.xml';

LET vFileSize = FileSize(a);
if vFileSize=0 or IsNull(vFileSize) then
load
*
From ...\*.qvd (qvd);
exit script;
end if
Название: Re: Проверка папки на наличие файлов
Отправлено: LoryMax от 21 сентября 2016, 01:29:47
если приходится некоторые qvd занулять, чтобы места они не занимали. есть возможность удалять файлы из скрипта?
Название: Re: Проверка папки на наличие файлов (Qlikview)
Отправлено: kvv от 21 сентября 2016, 01:49:34
Привет.
Есть такая возможность.
1. Можно сделать таблицу с одной строки:
Data:
LOAD * Inline [
ERASE, 1
];

И данную таблицу выгрузить с тем названием, qvd-файл который нужно затереть:
STORE * From Data into last.qvd (qvd);
В результате создаться qvd-файл с маленьким размером.

2. Второй вариант:
EXECUTE cmd.exe /c del "last.qvd";
Название: Re: Проверка папки на наличие файлов (Qlikview)
Отправлено: LoryMax от 21 сентября 2016, 02:11:19
Благодарю!
Название: Re: Проверка папки на наличие файлов (Qlikview)
Отправлено: LoryMax от 25 сентября 2016, 07:42:03
Цитата: kvv от 21 сентября  2016, 01:49:34  
2. Второй вариант:
EXECUTE cmd.exe /c del "last.qvd";

Сейчас решил прописать код по удалению файлов - в итоге идет ошибка:
EXECUTE statement not available in this script mode: [код]
Какие нюансы? использую QS.
Название: Re: Проверка папки на наличие файлов (Qlikview)
Отправлено: admin от 25 сентября 2016, 08:41:16
Привет.
В стандартном режиме скрипта Qlik Sense ( и Desktop в том числе) этот оператор не поддерживается.
Подробнее здесь (http://help.qlik.com/ru-RU/sense/3.0/Subsystems/Hub/Content/LoadData/file-system-access-restriction.htm).
Тоже предстоит столкнуться с подобной задачей. Планирую выгружать в csv перечень файлов для удаления, и обрабатывать этот перечень уже на сервере.
Название: Re: Проверка папки на наличие файлов (Qlikview)
Отправлено: kvv от 26 сентября 2016, 01:42:12
Цитата: LoryMax от 25 сентября  2016, 07:42:03  
Цитата: kvv от 21 сентября  2016, 01:49:34  
2. Второй вариант:
EXECUTE cmd.exe /c del "last.qvd";

Сейчас решил прописать код по удалению файлов - в итоге идет ошибка:
EXECUTE statement not available in this script mode: [код]
Какие нюансы? использую QS.

Привет.
Да, есть нюанс в QlikView. С Qliksense, к сожалению, не работаю.
Смотреть прикрепленный файл 02.png
Название: Re: Проверка папки на наличие файлов (Qlikview)
Отправлено: millik от 27 сентября 2016, 10:08:41
Цитата: admin от 25 сентября  2016, 08:41:16  
Привет.
В стандартном режиме скрипта Qlik Sense ( и Desktop в том числе) этот оператор не поддерживается.
Подробнее здесь (http://help.qlik.com/ru-RU/sense/3.0/Subsystems/Hub/Content/LoadData/file-system-access-restriction.htm).
Тоже предстоит столкнуться с подобной задачей. Планирую выгружать в csv перечень файлов для удаления, и обрабатывать этот перечень уже на сервере.

Стандартный режим можно отключить как у десктопа так и у сервера.
И я давно его уже вырубил, потому что слишком уж много ограничений он накладывает. Самое банальное - невозможность обратиться к источнику данных напрямую, обязательно использовать lib.
Название: Re: Проверка папки на наличие файлов (Qlikview, Qlik Sense)
Отправлено: LoryMax от 08 октября 2016, 02:36:48
Каким образом отключить стандартный режим?
Название: Re: Проверка папки на наличие файлов (Qlikview, Qlik Sense)
Отправлено: PadijVD от 08 октября 2016, 05:47:41
Добрый вечер.
Помогите решить задачу:
Есть дерево папок в которые систематически добавляются файлы и после обработки удаляются
Пример папок:
..\Регион 1
..\Регион 2
..\Регион 3
и тд.
Но так как не всегда все папки содержат файлы скрипт соответственно выдает ошибку о том что файл для обработки не найден
Как обрабатывать только папки содержащие файлы исключая пустые папки из загрузки?
Название: Re: Проверка папки на наличие файлов (Qlikview, Qlik Sense)
Отправлено: millik от 11 октября 2016, 02:54:00
Цитата: LoryMax от 08 октября  2016, 02:36:48  
Каким образом отключить стандартный режим?
Если у вас Desktop, то меняем параметр на StandardReload=0 в файлике  Settings.ini. Находится он C:\Users\<...>\Documents\Qlik\Sense

Если сервер, то QMC-Engines, там заходим в настройки нашего "engine", там Advanced, убираем галочку Standard Mode, перезапускаем службу.