Ir ao conteúdo
  • Cadastre-se
alison.rm

RESOLVIDO Importar TXT sem tabulação para Excel

Recommended Posts

Olá srs, estou com um arquivo txt bastante sujo para converter em xlsx, está muito complicado principalmente porque não tem quebra de linhas. Tentei usar Converter texto em Colunas no Excel, mas se ele delimitasse considerando vários espaços seria prático. Está assim (parte):

¾ ŠP ALWAYS ACTIVE COB.SECA        C/ABAS    NOTURNO   8         0            0                                ¾ ,j ALWAYS PLATINUM COB.SECA C/ABAS NOTURNO ULTRAFINO 8UN       +              Ñ                               ¾ ™Y ALWAYS PLATINUM DIA COB SECA C/ABAS 8UN                                                                         ¾ -j ALWAYS PLATINUM DIA COB.SECA C/ABAS NL ULTRAFINO 8UN        Ñ             Ñ                                ¾ ë: ALWAYS SUPER PROTECAO COB SUAVE NL MD C/ABAS 8                                Ò                                (¾ í: ALWAYS SUPER PROTECAO COB SUAVE NL MD S/ABAS 8                                Ç                                (¾ A’ OE ALWAYS  COB SECA    S/ABAS NL MD LV8 PG7 8               æ                                                 ¾  n OE ALWAYS BASICO COB SECA               NL MD     LV8 PG7 8                                                     ¾ ü: OE ALWAYS SUPER PROTECAO COB SECA NL MD S/ABAS LV 8 PG 7                      æ                               (¾ K™ OE SEMPRE LIVRE ESP SUAVE NL ADAPT (1A1) C/ABAS L8P7 8UN    Ò             Ò                                ¾ D™ SEMPRE LIVRE ESPECIAL   SUAVE     FORM ADAP T NL MD  8      ð     (        ð       $                          ¾ e SEMPRE LIVRE ESPECIAL AGNAT COBSECA ABAS MD 8 7891010808037                                              ¾ 6 SEMPRE LIVRE ESPECIAL AGNAT SECA NL 8 7891010808020         ÿ              ÿ                	                $¾ E™ SEMPRE LIVRE ESPECIAL SUAVE     FORM ADAPTMD C/ABS 8        ^                                                 ¾ ce SEMPRE LI

O problema é que o arquivo não tem quebra de linha. Outro problema é que vários descritivos (que é o que importa) estão com espaços:

CLOSE UP            LIQ FRESH ICE                 100 G

Queria um forma de deixar uma tabela somente com o descritivo:

CLOSE UP LIQ FRESH RED HOT 100 GCAREFREE ORIGINAL C/P INC 1A1)PROT DIARI 15AVANCO ORIGINAL NL SPRAY 85 ML

Agradeço a ajuda!

 

Att

 

PS: iriei fazer isso com outros arquivos txt, mas segue o mesmo padrão desse, mudam os descritivos e a quantidade de itens somente.

LOTxxx.TXT

Compartilhar este post


Link para o post
Compartilhar em outros sites

@alison.rm

 

 

Amigo, eu já criei rotinas para importação de bancos de dados desconhecidos (com formato proprietário), mas essa amostra de arquivo de dados que você passou se superou.. :eek::) O problema é que você não tem marcação alguma padronizada onde você possa identificar os campos de dados. Mesmo num banco desconhecido, ainda que binário, você tem como identificar e fazer a leitura nos pontos corretos. Normalmente isso é passível de ser feito.

 

Isso aí é algum dump de memória, procede? Há muitos caracteres de controles, totalmente dispersos, sem nenhuma coerência.. esse é o problema.

 

Eu montei um programinha em C para pelo menos estripar esses caracteres de controle e colocar os itens dispostos em cada linha. Ainda restou lixo, mas pelo menos a leitura já fica mais fácil. Seria necessário processá-lo mais uma vez, mas agora daria mais trabalho.

 

Dê uma olhada no anexo e veja se já ajuda em alguma coisa..

 

 

LNW

SAM.TXT

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, @LNW

 

Obrigado pelo atenção. Realmente o arquivo é complicado, mas ajudou bastante. Com aquele aquivo tive que usar uma função VBA para dá uma limpada nos caracteres. usei isso:

Function Acento(caract)     'Acentos e caracteres especiais que serão buscados na string    'Você pode definir outros caracteres nessa variável, mas    ' precisará também colocar a letra correspondente em codiB    codiA = "ª¾ ŠœÇ¦Å§»†åˆÆº¤Þ¤Ø•…³ˆ~¿Ÿ|µ'@!#$–-ß––í––¥š´¨\´`[{]}^~:;?‰*àáâãäèéêëìíîïòóôõöùúûüÀÁÂÃÄÈÉÊËÌÍÎÒÓÔÕÖÙÚÛÜçÇñÿÑ"         'Letras correspondentes para substituição    codiB = "___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________"         'Armazena em temp a string recebida    temp = caract         'Loop que irá de andará a string letra a letra    For i = 1 To Len(temp)             'InStr buscará se a letra indice i de temp pertence a        ' codiA e se existir retornará a posição dela        p = InStr(codiA, Mid(temp, i, 1))                 'Substitui a letra de indice i em codiA pela sua        ' correspondente em codiB        If p > 0 Then Mid(temp, i, 1) = Mid(codiB, p, 1)    Next         'Retorna a nova string    Acento = temp     End Function

Depois tive que substituir o "_". Depois surgiu outro problema, alguns caracteres restantes (depois jogo eles no VBA acima)... aí ficou algumas células com apenas 1 até 5 caractere inúteis. Usei a fórmula NUM,CARACT para organizar em ordem alfabética. Células com poucos caracteres (1 a 5) excluí.

 

Ficou como o anexo, pensei numa única função pra tudo, mas tá bom! Você pode mandar a que você usou?

 

Novamente muito obrigado pela ajuda!

 

Att

Pasta1.rar

Compartilhar este post


Link para o post
Compartilhar em outros sites

@alison.rm

 

 

Segue abaixo.

 

Analisando melhor agora o formato de saída, vejo que não seria muito complicado adaptar para essa saída formatada como você quer. Se perceber bem (pelo TXT que postei), todos os itens ficam sempre dentro de um espaço não inferior a 60. Alguns poucos estão truncados ou não são itens. Isso de certa forma serve como referência. Qualquer string com tamanho inferior a isso seria lixo/espaço e poderia ser removida. Cortada a string (no tamanho 60), basta remover os espaços excessivos.

 

Eu vi que você usou VBA, correto? Tenho pouco ou quase nenhum conhecimento em VBA. Se isso precisa ser feito inteiramente dentro do Excel, você vai ter que dar um jeito de traduzir o código abaixo...

 

 

Depois de compilar o código abaixo, basta chamar:

C:\> programa.exe > SAIDA.TXT
#include <stdio.h>#include <stdlib.h>#include <string.h>int main(void){    long size;    int i;    char *buffer, *pch;    char delim[32];    FILE *fp;    char *fn = "LOTxxx.TXT";    for (i = 0; i < 31; i++)        delim[i] = (char)(i + 1);    delim[31] = 0;    fp = fopen(fn, "rb");    fseek (fp, 0, SEEK_END);    size = ftell (fp);    rewind (fp);    buffer = malloc (sizeof(char)*size + 1);    fread (buffer, 1, size, fp);    buffer[size] = 0;    pch = strtok(buffer, delim);    while (pch != NULL)    {        printf("%s\n", pch + 1);        pch = strtok(NULL, delim);    }    free(buffer);    fclose(fp);    return 0;}

Abs.

 

:cool:

LNW

Compartilhar este post


Link para o post
Compartilhar em outros sites

@LNW

 

Obrigado, na verdade não entendo muito de VBA mas vou analisar aqui, mas mesmo que não consiga fazer mais nada, você já deixou de uma forma que agora dá pra chegar em algum lugar, dá pra trabalha-la com um pouco de tempo, vou trabalhar melhor aqueles VBAs e fórmulas que disse, mas do jeito que estava não chegaria a lugar algum.

 

Novamente obrigado pela atenção.

 

Att

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×