LibreOffice Calc [RESOLVIDO]

1. LibreOffice Calc [RESOLVIDO]

Carlos Guedes
caduguedess

(usa Outra)

Enviado em 17/08/2015 - 13:57h

Boa tarde, pessoal.
Preciso organizar dados provenientes de um arquivo no formato PDF.
Copiei e colei os dados para uma planilha do LibreOffice Calc (aproximadamente 20 mil linhas).
O objetivo é obter três outras colunas, uma com o valor do lote, uma com o peso do lote e uma com o código do lote.
Para obter o valor do lote eu coloquei o $ como separador de colunas na hora de colar, então o número que estava após o $ foi separado em outra coluna, mas não estou conseguindo extrair a informação do peso do lote, pois ela está dentro de um texto. Também não consigo extrair o código do lote.
Abaixo vou colar um extrato da tabela contendo apenas 3 itens, cada item pode ter de 5 a 7 linhas, dependendo do tamanho da descrição:

0453.000001-9
0453.213.00000211-7
TRES ANÉIS, DE: OURO; CONTÉM: pedras; CONSTAM: amolgada(s), PESO LOTE:
10,43G (DEZ GRAMAS E QUARENTA E TRES CENTIGRAMAS)
R$ 623,00
0453.000002-7
0453.213.00001127-2
UMA ALIANÇA, UM ANEL, QUATRO BRINCOS, DE: OURO; CONSTAM:
amolgada(s), amassada(s), iniciais, inscrições, PESO LOTE: 5,20G (CINCO
GRAMAS E VINTE CENTIGRAMAS)
R$ 216,00
0453.000003-5
0453.213.00001223-6
UM COLAR, UMA PULSEIRA, DE: OURO BRANCO, OURO, PESO LOTE: 10,30G
(DEZ GRAMAS E TRINTA CENTIGRAMAS)
R$ 536,00

Se puderem me dar uma luz de como posso fazer isso seria ótimo.
Desde já, obrigado pela atenção.



  


2. MELHOR RESPOSTA

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 18/08/2015 - 00:10h

Tinha varias inconsistências no arquivo.txt (Linhas de cabeçalho das paginas, Erros de português, falta de palavras inteiras, falta de espaços e etc..) e logo nas palavras chaves, fugindo mais ainda do padrão.rsrs

Ainda bem que existe Expressões regulares :)

Ta na mão: http://we.tl/n1BPHJkVJS

OBS: Das quase 25 mil linhas tratadas, 18 linhas ficaram tão grandes que tiveram de ser quebradas em duas.


abs
---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---

3. Re: LibreOffice Calc

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 17/08/2015 - 14:57h

Olá,

Tô confuso.

Poderia postar o conteúdo da forma como disposto abaixo ?


Imagine que sua planilha/pdf tenha somente 2 linhas (titulos e valores). Como deseja a saída?


Coluna 1: Valor Coluna 1
Coluna 2: Valor Coluna 2
Coluna 3: Valor Coluna 3
Coluna 4: Valor Coluna 4
Coluna 5: Valor Coluna 5
Coluna 6: Valor Coluna 6
Coluna 7: Valor Coluna 7
Coluna 8: Valor Coluna 8

Poste tbm pfvr, usando a tag <code>, um exemplo real das 2 primeiras linhas (titulo e valor) do arquivo original (exatamente como está - CTRL C/CTRL V).

Abs,



---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---


4. Re: LibreOffice Calc

Carlos Guedes
caduguedess

(usa Outra)

Enviado em 17/08/2015 - 15:33h

Acho que a melhor maneira de me expressar seria por meio de screenshots.
A primeira imagem é o arquivo PDF de onde copiei os dados.
A segunda imagem é a planilha com os dados colados.

https://uploaddeimagens.com.br/imagens/copiar-png--2
https://uploaddeimagens.com.br/imagens/colar-png--5


Desejo uma coluna com o código do lote, uma coluna com o valor do lote e uma coluna com o peso do lote.
Desejo o seguinte:

COLUNA 1 0453.000001-9 0453.000002-7 .....
COLUNA 2 623 216 .....
COLUNA 3 10,43 5,20 .....

Seguem abaixo as linhas referentes aos 2 primeiros lotes.
(Esse é um dos problemas, na hora de colar, cada lote ocupa várias linhas)
0453.000001-9
0453.213.00000211-7
TRES ANÉIS, DE: OURO; CONTÉM: pedras; CONSTAM: amolgada(s), PESO LOTE:
10,43G (DEZ GRAMAS E QUARENTA E TRES CENTIGRAMAS)
R$ 623,00
0453.000002-7
0453.213.00001127-2
UMA ALIANÇA, UM ANEL, QUATRO BRINCOS, DE: OURO; CONSTAM:
amolgada(s), amassada(s), iniciais, inscrições, PESO LOTE: 5,20G (CINCO
GRAMAS E VINTE CENTIGRAMAS)
R$ 216,00



5. Re: LibreOffice Calc [RESOLVIDO]

CASSIO FERRAZ
cassio88

(usa Ubuntu)

Enviado em 17/08/2015 - 15:38h

em PHP, eu faria assim:
a) salvar como txt
b) varrer o arquivo texto e obedecer ao seguinte:
- os primeiro treze caracteres são o campo 1
- daí, até chegar ao caractere antes de R$, é o campo 2
- localizar a vírgula, então até dois caracteres para a frente, é o campo 3 (valor)

e conforme varre o arquivo texto, vai alimentando a tabela no banco de dados

A sugestão do colega acima parece ser melhor que a minha, deve ser algo como incluir tags, transformar em XML e depois no arquivo desejado,





6. Re: LibreOffice Calc [RESOLVIDO]

Carlos Guedes
caduguedess

(usa Outra)

Enviado em 17/08/2015 - 16:17h

cassio88 escreveu:

em PHP, eu faria assim:
a) salvar como txt
b) varrer o arquivo texto e obedecer ao seguinte:
- os primeiro treze caracteres são o campo 1
- daí, até chegar ao caractere antes de R$, é o campo 2
- localizar a vírgula, então até dois caracteres para a frente, é o campo 3 (valor)

e conforme varre o arquivo texto, vai alimentando a tabela no banco de dados

A sugestão do colega acima parece ser melhor que a minha, deve ser algo como incluir tags, transformar em XML e depois no arquivo desejado,





Pois é, não sei como seria a programação.
Copiei o texto referente ao primeiro lote como exemplo, está na screenshot abaixo:

https://uploaddeimagens.com.br/imagens/texto-png--11

O pseudocódigo poderia ser:
Linha 1
Campo 1 (código) = caractere 1 até caractere 13
Campo 2 (descrição) = caractere 14 até a expressão "PESO LOTE:" que acabaria no caractere x
Campo 3 (peso) = caractere x+1 até caractere ser igual à letra G que seria o caractere y
Campo 4 (peso por extenso) = caractere y+1 até caractere ser igual a ")" que seria o caractere z
Campo 5 (valor do lote) = caractere z+4 até 2 caracteres após a vírgula
pular linha



7. Re: LibreOffice Calc

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 17/08/2015 - 19:48h

Opa, desculpe a demora (o bicho ta pegando por aqui rs)

A única solução que vem a cabeça, e trazer pra para área que conheço (Shell Script). Deve existir uma solução mais bonita/profissional. Maaaaas esse tbm resolve.

OBS1:: Deixei o script bem flexivel e comentado para caso vc precise fazer modificações no futuro.
OBS2:: Tive que fazer alguns malabarismos pra fugir dos caracteres ocultos, então o batizei de tirazica.sh

Vamos lá...

1) Copie do pdf e ao invés de colar no Calc, cole num editor de texto qualquer e salve o arquivo. (daqui pra frente vamos chamá-lo de arquivo.txt, mas vc pode dar o nome que quiser, ok?)

2) Usando o terminal, crie o arquivo chamado tirazica.sh
nano tirazica.sh 


3) Cole o conteúdo abaixo nele:
#!/bin/bash
#
# Script Criado para solucionar um problema do user @caduguedess do VOL.
#
# _____ _ ______
# |_ _(_)_ __ __ _|__ (_) ___ __ _
# | | | | '__/ _` | / /| |/ __/ _` |
# | | | | | | (_| |/ /_| | (_| (_| |
# |_| |_|_| \__,_/____|_|\___\__,_|
#
# Trata texto puro contaminado por caracteres ocultos e gera txt formatado.
#
# Utilização:
# ./tirazica.sh arquivo_entrada arquivo_final

# ********************************************************
# Variáveis
txt=$1
tmp='/tmp/arq_temp1'
final=$2
# ********************************************************

# Trata o arquivo de texto puro, adionando quebras linhas, que usaremos como separador de blocos
sed -r '/,[0-9]{2}$/ s/$/\n/g' $txt > $tmp

# Montando cabeçalho/colunas do arquivo final
echo "LOTE+DESCRIÇÃO+PESO+PESO POR EXTENSO+VALOR" > $final
clear

# Incio do Loop
for i in $(seq 1 $(sed -n '/^$/p' $tmp | wc -l))
do sed -rn '1,/^$/ p' $tmp | fmt | paste -s | sed 's/\s/\n/2;s/PESO LOTE:/\n/;s/R\$/\n&/;s/([A-Z]/\n&/g' | tr "\n" "+" | sed 's/$/\n/' >> $final
sed -i '1,/^$/d' $tmp
echo "Montando linha número $i....."
clear
done

# Removendo arquivo temporario.
rm -f $tmp

echo -e "\n\n\n Processo concluído com sucesso ! \n Foram criadas $(wc -l $final | sed 's/[^0-9]//g') Linhas/Registros (Contando o Cabeçalho). \n Agora, basta importar para o Calc e definir o caratere '+' como separador de campos.\n\n Obrigado!\n\n"


4) Salve e saia ( CTRL + X, depois S ou Y, depois ENTER)

5) Dê permissão de execução:
sudo chmod +x tirazica.sh 


6) Execute o script, passando como parametro o arquivo.txt e o nome para um arquivo de saida, por exemplo arquivo_tratado.txt
./tirazica.sh arquivo.txt arquivo_tratado.txt 


7) Pronto ! Agora basta vc copiar ou importar para o Calc/Excel e usar o caractere + como delimitador


Espero que ajude!

abs

---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---


8. Re: LibreOffice Calc [RESOLVIDO]

Carlos Guedes
caduguedess

(usa Outra)

Enviado em 17/08/2015 - 22:08h


Obrigado pela ajuda, mas estou travado em um passo.
Meu sistema operacional é o Windows, por isso não sei como acessar o Terminal, creio que seria somente pelo Linux, como procedo pelo Windows?
Obrigado


9. Re: LibreOffice Calc

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 17/08/2015 - 22:19h

Putzzzz

Não sei fazer via windows. :(

Bom, temos 2 alternativas, uma boa e uma ruim pra vc.

Ruim:
Posta o arquivo.txt aqui que eu te envio o planilha montada.
Resolve seu problema, mas vc não aprenderá nada.

Boa:
Baixa um iso/live, boota pelo pen e faça vc mesmo.
Alem de resolver, vc irá aprender e da proxima vc nao depende mais de ninguém. :)

Is up to you!

abs

---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---


10. Re: LibreOffice Calc [RESOLVIDO]

Carlos Guedes
caduguedess

(usa Outra)

Enviado em 17/08/2015 - 22:44h

Obrigado pela ajuda.
Vou precisar da sua ajuda dessa vez, mas vou estudar esse assunto e me aprofundar das próximas vezes.
Fiz upload do arquivo.txt
O link para o arquivo texto é esse

http://www.yourfilelink.com/get.php?fid=1105323


11. Re: LibreOffice Calc [RESOLVIDO]

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 17/08/2015 - 23:09h

Blza!

Promessa é divida hein!?! Quero ver vc por aqui postando sobre o linux...


Vou fazer aqui e ja posto o link do arquivo pronto.

abs

---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---


12. Re: LibreOffice Calc [RESOLVIDO]

Carlos Guedes
caduguedess

(usa Outra)

Enviado em 18/08/2015 - 16:37h

Obrigado pela força.
Imagino que tenha dado trabalho mesmo, quando copiei eu nem me toquei que tinha cabeçalho nas páginas.
Tentei executar a shell script usando o Cygwin, mas não consegui.
Expressões regulares que vc diz seria algo específico de shell script ou apenas termos que se repetem em um padrão específico dentro dos dados?
abs



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts