Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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
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
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;
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 "|" ?
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
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
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;
Segue arquivo de exemplo
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
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