Pergunte aqui
0

Separar texto a partir de sua posição

perguntadas 2019-12-16 15:09:06 +0100

imagem do gravatar de marqueslp

updated 2019-12-20 13:08:11 +0100

Caros. Gero regularmente arquivos de texto sem separador de campos. Cada linha é do seguinte formato.

0017120000000001705000000000171203477000000000000571700000000000959830000

Preciso extrair dados em 4 colunas utilizando parte de cada linha conforme a posição do texto. Ou seja, a coluna 1 teria o texto da posição 6 a 12: 2000000; a coluna 2 da posição 17 a 20: 7050 e assim por diante.

Poderia fazer no calc manualmente, mas o arquivo é muito grande (mais de 200 mil linhas). Além do mais, após essa separação vou ter de fazer uma consulta para filtrar conforme alguns parâmetros que variam conforme a data da extração (por isso a consulta no base)

Para fazer essa extração é necessário primeiro criar uma tabela vazia e depois alterá-la com os dados desejados ou é possível uma consulta direta que já faça essa separação e na qual possa utilizar os filtros que preciso?

Complemento

Três linhas do arquivo texto são assim:

0125072018DCT000005380000006986005452422

0126072018DCT003253548005289756000000000

0127072018DOT000056869000077885002567586

Os dois primeiros campos representam um código de origem do arquivo (se não me engano do sistema interno, no arquivo que trabalho não variam), os 8 seguintes são datas, depois há 03 campos com identificação do setor de origem dos dados, que fez as medições e alimentou o sistema. O exemplo acima termina com três campos de 09 posições cada. São as medidas (seriam campos numéricos na planilha). Pode haver mais campos com resultado de medições, mas mantém o padrão de 09 posições que são todas zero se não se aplica ao setor/data (conforme a segunda linha acima.

editar alterar tag assinalar como ofensivo fechar mesclar Excluir

Comentários

@marqueslp, sei que é possível, anos 80/90 trabalhei em Siderúrgica, e os Bancos de dados sobre produção eram todos desta maneira. E existia uma tabela com as opções de uso, por exemplo para o seu Coluna1 a opção para uso seria 006 007 0, ou seja o código de opção era o inicio do campo e os 2o. parâmetro era o tamanho do campo e o terceiro quantidade de decimais. E o programa que gerava o relatório foi montado pela equipe de Ti da Empresa. Porém no Base não tenho conhecimento como faze-lo.

imagem do gravatar de SchiavinattoSchiavinatto ( 2019-12-16 15:41:22 +0100 )editar

Tem um exemplo deste arquivo para disponibilizar ?

imagem do gravatar de SchiavinattoSchiavinatto ( 2019-12-16 17:58:46 +0100 )editar

Não use Adicionar resposta para comentários, use editar em sua pergunta ou comentar abaixo.

imagem do gravatar de SchiavinattoSchiavinatto ( 2019-12-16 21:06:20 +0100 )editar

Desculpe pela forma incorreta da réplica. Sim, é isso. Mais precisamente:

01 25072018 DCT 000005380 000006986 005452422

01 26072018 DCT 003253548 005289756 000000000

01 27072018 DOT 000056869 000077885 002567586

Num caracteres
2 + 8 + 3 + 9 + 9 + 9

Na pergunta inicial havia falado em 4 colunas, mas pelo exemplo acima o resultado final seria com 6 colunas

imagem do gravatar de marqueslpmarqueslp ( 2019-12-16 21:56:38 +0100 )editar

Veja exemplo 2 na resposta.

imagem do gravatar de SchiavinattoSchiavinatto ( 2019-12-16 22:44:11 +0100 )editar

1 Resposta

0

respondidas 2019-12-16 21:23:24 +0100

updated 2019-12-16 22:46:29 +0100

@marqueslp, é algo assim que precisa,

Disse 2+8+9+9+9 = 37 sobrou 3

Descrição da imagem

arquivo exemplo

arquivo exemplo 2

Se será viável ou não fazer em Calc, só testando.

-----------------------------------------------------------------------------

ATENÇÂO:: Para dar mais detalhes a sua pergunta, use Descrição da imagem na pergunta ou Descrição da imagem abaixo. Não use Adicionar resposta para comentário. Grato.

Caso a resposta atendeu sua necessidade, por gentileza, click na bolinha Descrição da imagem a esquerda da resposta, para finalizar a pergunta.

editar assinalar como ofensivo Excluir Link mais

Comentários

1

@gilberto schiavinatto

Experimente a Função EXT.TEXTO (geralmente mais indicada para estas situações)

Seguindo seu exemplo:

Primeira divisão =EXT.TEXTO(A1;1;2)
Segunda divisão =EXT.TEXTO(A1;3;8)
Terceira divisão =EXT.TEXTO(A1;11;9)
Quarta divisão =EXT.TEXTO(A1;20;9)
Quinta divisão =EXT.TEXTO(A1;29;9)
Sexta divisão =EXT.TEXTO(A1;38;3)

Outro exemplo de como utilizar esta função

Célula A10 = 0,01 / 0,1 Quero colocar separado cada valor da barra

Antes da Barra =EXT.TEXTO(A10;1;PESQUISAR(" / ";A10)-1)
Depois da Barra =EXT.TEXTO(A10;PESQUISAR(" / ";A10)+3;50)
imagem do gravatar de ConradoConrado ( 2019-12-17 12:50:52 +0100 )editar
1

Ok @Conrado, bem lembrado, e mais indicado.

imagem do gravatar de SchiavinattoSchiavinatto ( 2019-12-17 14:02:22 +0100 )editar

@gilberto schiavinatto e @Conrado . Obrigado pela ajuda! Inverti a ordem de trabalho que pensei inicialmente. Com uso de consulta where / like no base filtrei os registros de interesse e daí no calc FIZ a separação dos campos como mostrado. Sobrou a curiosidade de separar os campos no base. Mas isso fica para eu testar depois

imagem do gravatar de marqueslpmarqueslp ( 2019-12-17 19:10:41 +0100 )editar
Login/Registrar para responder

Ferramentas de perguntas

1 seguidor

Estatísticas

Perguntadas: 2019-12-16 15:09:06 +0100

Lidas: 25 vezes

Última atualização: Dec 16 '19