Чтение текстового файла

Автор andrrreasss, 29 августа 2018, 10:38:19

« назад - далее »

andrrreasss

Есть файл с разделителями. Пример строки:

20180828,EVENT,3,ValName1=1,ValName2=2,ValName3=3
20180828,EVENT,3,ValName1=11,ValName3=33,ValName2=22
20180828,EVENT,3,ValName3=333,ValName1=111,ValName2=222

Проблема в том что поля могут находится в разных колонках, если поделить по разделителю.

То есть файл надо разбирать построчно, получая всю строку, а потом по именам параметров получать значения. Не пойму как это реализовать в Клик Сенсе. При загрузке строка уже раскладывается по колонкам.

Читать в цикле файл построчно? Думаю это будет ооочень долго на всех данных.

admin

#1
Привет.
Я так понимаю, что первые два столбца фиксированы?
Рассматривайте переменную часть как набор полей в одном поле.
При считывании файла мы можем эти колонки объединить в одну, с последующей обработкой для создания полей по части поля до знака =.
https://help.qlik.com/ru-RU/qlikview/November2017/Subsystems/Client/Content/DataSource/generic-databases.htm

andrrreasss

Единственное что пришло в голову. Собирать все поля в промежуточную таблицу и потом уже обрабатывать как надо

Load
@1&@2&@3&@4&@5&@6&@7&@8&@9&@10&@11&@12&@13&@14 as TextData
From [$(FullPathFile)]

admin

Цитата: andrrreasss от 29 августа  2018, 11:08:30  
Единственное что пришло в голову. Собирать все поля в промежуточную таблицу и потом уже обрабатывать как надо

Load
@1&@2&@3&@4&@5&@6&@7&@8&@9&@10&@11&@12&@13&@14 as TextData
From [$(FullPathFile)]

Вот например:

$(Include=..\qlikview-components-master\qvc_runtime\qvc.qvs);

t1:
load IdR,F1,F2,F3,SubField(F9,'=',1) as F10,SubField(F9,'=',2) as F11;
load *,SubField(F8,'~') as F9;
LOAD RecNo() as IdR, F1,F2,F3, F5&'~'&F6&'~'&F7 as F8 INLINE [
    F1,F2,F3,F5,F6,F7
    20180828,EVENT,3,ValName1=1,ValName2=2,ValName3=3
    20180828,EVENT,3,ValName1=11,ValName3=33,ValName2=22
    20180828,EVENT,3,ValName3=333,ValName1=111,ValName2=222
];

t2:
generic LOAD IdR,F1,F2,F3,F10,F11 Resident t1;

CALL Qvc.JoinGenericTables('t1', 't2');

ikkar

Или так траспонировать полезные данные и использовать потом сет анализ при визуализации аля:
sum({<Показатель={ValName1}>}Значение)
(вопрос с объемами конечно за кадром... но вариант...)


temp:
LOAD @1,
     @2,
     @3,
     @4,
     @5,
     @6
FROM
[D:\1.txt]
(txt, codepage is 1251, no labels, delimiter is ',', msq);

for each r in 'ValName1','ValName2','ValName3'

result:
load
date(date#(@1,'YYYYMMDD'),'DD.MM.YYYY') as Field1,
@2 as Field2,
@3 as Field3,
'$(r)' as Показатель,
TextBetween(@4&'|'&@5&'|'&@6&'|','$(r)=','|') as Значение
Resident temp;

next r;
drop table temp;

Яндекс.Метрика