Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
Ноябрь 18, 2018, 02:14:36 am

Автор Тема: Чтение текстового файла  (Прочитано 397 раз)

Оффлайн andrrreasss

  • Новичок
  • *
  • Сообщений: 14
  • Страна: ru
  • Рейтинг: +3/-0
    • Просмотр профиля
Чтение текстового файла
« : Август 29, 2018, 10:38:19 am »
Есть файл с разделителями. Пример строки:

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

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1215
  • Страна: ru
  • Рейтинг: +129/-0
    • Просмотр профиля
Re: Чтение текстового файла
« Ответ #1 : Август 29, 2018, 11:05:03 am »
Привет.
Я так понимаю, что первые два столбца фиксированы?
Рассматривайте переменную часть как набор полей в одном поле.
При считывании файла мы можем эти колонки объединить в одну, с последующей обработкой для создания полей по части поля до знака =.
https://help.qlik.com/ru-RU/qlikview/November2017/Subsystems/Client/Content/DataSource/generic-databases.htm

Оффлайн andrrreasss

  • Новичок
  • *
  • Сообщений: 14
  • Страна: ru
  • Рейтинг: +3/-0
    • Просмотр профиля
Re: Чтение текстового файла
« Ответ #2 : Август 29, 2018, 11:08:30 am »
Единственное что пришло в голову. Собирать все поля в промежуточную таблицу и потом уже обрабатывать как надо

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

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

Re: Чтение текстового файла
« Ответ #2 : Август 29, 2018, 11:08:30 am »

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1215
  • Страна: ru
  • Рейтинг: +129/-0
    • Просмотр профиля
Re: Чтение текстового файла
« Ответ #3 : Август 29, 2018, 03:06:58 pm »
Единственное что пришло в голову. Собирать все поля в промежуточную таблицу и потом уже обрабатывать как надо

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

  • Стажер
  • *
  • Сообщений: 1
  • Страна: ru
  • Рейтинг: +1/-0
    • Просмотр профиля
Re: Чтение текстового файла
« Ответ #4 : Август 31, 2018, 08:12:20 pm »
Или так траспонировать полезные данные и использовать потом сет анализ при визуализации аля:
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;

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

Re: Чтение текстового файла
« Ответ #4 : Август 31, 2018, 08:12:20 pm »