Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
joao_sp_campina
Creator II
Creator II

Arquivo txt com uma unica coluna (registro Fixo)

Bom dia Pessoal,

Alguém tem alguma ideia, de como resolver a extração de um arquivo txt com uma unica coluna (registro fixo ou delimitado). Este arquivo abrange a extração de várias colunas separadas por '|', Possuem também cabeçalhos, como ajustar as colunas (separar as colunas)?

Segue anexo um modelo parecido com minha necessidade:

Se alguém puder me ajudar, agradeço!

João Carlos Ferreira

1 Solution

Accepted Solutions
nicolett_yuri

João, veja essa forma:

TabelaTmp:

LOAD

  SubField(PurgeChar([@1:n], '|'), ' ', 1) as Campo1,

  SubField(PurgeChar([@1:n], '|'), ' ', 2) as Campo2,

  SubField(PurgeChar([@1:n], '|'), ' ', 3) as Campo3,

  SubField(PurgeChar([@1:n], '|'), ' ', 4) as Campo4,

  SubField(PurgeChar([@1:n], '|'), ' ', 5) as Campo5,

  SubField(PurgeChar([@1:n], '|'), ' ', 6) as Campo6,

  SubField(PurgeChar([@1:n], '|'), ' ', 7) as Campo7,

  SubField(PurgeChar([@1:n], '|'), ' ', 😎 as Campo8,

  SubField(PurgeChar([@1:n], '|'), ' ', 9) as Campo9

FROM (fix, codepage is 1252)

WHERE

  //deixa somente as linhas que começam com |

  LEFT(TRIM([@1:n]),1)='|'

  //remove linhas que teriam o nome da coluna

  AND SubField(PurgeChar([@1:n], '|'), ' ', 1) <> 'campo1'

  //remove linhas que possuem ----

  AND WILDMATCH(SubField(PurgeChar([@1:n], '|'), ' ', 1),'*----*')=0;

View solution in original post

6 Replies
nicolett_yuri

João,

serão sempre 9 campos?

O que é escrito no lugar de cabeçalho e de informações? São sempre essas três linhas reservadas? As informações das colunas sempre se iniciarão por "|" ?

joao_sp_campina
Creator II
Creator II
Author

Yuri,

A quantidade de campos será fixa. As quantidades de linhas de cabeçalho e informações serão sempre mantidas.

Sempre iniciarão as colunas com "|".

João Carlos

nicolett_yuri

João, veja essa forma:

TabelaTmp:

LOAD

  SubField(PurgeChar([@1:n], '|'), ' ', 1) as Campo1,

  SubField(PurgeChar([@1:n], '|'), ' ', 2) as Campo2,

  SubField(PurgeChar([@1:n], '|'), ' ', 3) as Campo3,

  SubField(PurgeChar([@1:n], '|'), ' ', 4) as Campo4,

  SubField(PurgeChar([@1:n], '|'), ' ', 5) as Campo5,

  SubField(PurgeChar([@1:n], '|'), ' ', 6) as Campo6,

  SubField(PurgeChar([@1:n], '|'), ' ', 7) as Campo7,

  SubField(PurgeChar([@1:n], '|'), ' ', 😎 as Campo8,

  SubField(PurgeChar([@1:n], '|'), ' ', 9) as Campo9

FROM (fix, codepage is 1252)

WHERE

  //deixa somente as linhas que começam com |

  LEFT(TRIM([@1:n]),1)='|'

  //remove linhas que teriam o nome da coluna

  AND SubField(PurgeChar([@1:n], '|'), ' ', 1) <> 'campo1'

  //remove linhas que possuem ----

  AND WILDMATCH(SubField(PurgeChar([@1:n], '|'), ' ', 1),'*----*')=0;

nicolett_yuri

Segue arquivo de exemplo

joao_sp_campina
Creator II
Creator II
Author

Yury boa tarde,

Fiz os testes aqui com o script que você enviou, funciona em parte.

Mas esta acontecendo o seguinte: O primeiro campo funciona perfeitamente. A partir do segundo campo pode acontecer de existir mais de um  espaço entre o conteúdo do primeiro campo e o início do conteúdo do segundo campo. Quando acontece isto não está pegando os  valores corretos.

Por exemplo:

            Campo1|Campo2

Linha1  |2062    |0005

Linha2  |2062    |

Quando você usa no script o subfield com delimitador (separador) por espaços vazios, quando existir mais de um espaço vazio ele não carrega o campo (entre o 2 e 0). Pode acontecer do conteúdo do segundo campo ser vazio também.

João Carlos

joao_sp_campina
Creator II
Creator II
Author

Bom dia Yuri,

Usando a sua lógica, fiz os ajustes de acordo com minha necessidade e funcionou perfeitamente.

Muito obrigado pela ajuda!

Bom trabalho!

João Carlos