shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Re: Ajuda Rastreamento Correios


From: Ernander (Nander)
Subject: Re: [shell-script] Re: Ajuda Rastreamento Correios
Date: Thu, 9 Jul 2009 14:39:45 -0300

Ok !!!

Como te disse Comprei o Livro do Julio... Mas ele veio com defeitos e o
Devolvi. E como o novo chegou to indo aos poucos e testando, mas vou pular
para a parte do IFS

valeu mesmo!

P.S o Site dos Correios é um Lixo  mesmo . ....


Att


Ernander

2009/7/9 Cristiano Ferrari <address@hidden>

>
>
> --- Em address@hidden <shell-script%40yahoogrupos.com.br>,
> "Ernander (Nander)" <ernander@...> escreveu
>
> >
> > Bom dia A Todos!
> >
> > Primeiramente gostaria de pedir Desculpas pela gafe do e-mail em html. E
> > para me redimir todos os exemplos que darei são impreterivelmente no
> > pastebin. Segundo que eu estive fora e não pude responder em tempo as
> > atenções ao meu problema.
> >
> > Voltando ao assunto, estou comendo ER's para tentar enten der e fazer
> tudo
> > para obter um melhor resultado. A Solução do Cristiano Ferrari, como
> sempre
> > um grande colaborador da Lista, ajudou muito mas com o "head -n 2" estava
> > pegando uma linha a mais, o que foi consertado com um "head -n 1" (
> basico
> > he he ) .
> >
> > Ate agora Bakana! O problema Agora é :
> >
> > como recebo um arquivo com as movimentações mensais desta forma:
> >
> > ver 1º Exemplo do pastebin
> >
> > preciso pegar o nome do Cliente (2º Campo), data da postagem (6º campo),
> > numero da encomenda (7º campo) e jogar junto com o retono da verificação
> > junto ao site dos correios a Data(1º campo de retorno), hora(segundo
> campo
> > de retorno) e o Status da encomenda( último campo de retorno) ( vide 2º
> > exemplo pastebin).
> >
> > Nisso montando a Seguinte saída:
> >
> > Vide 3 exemplo pastebin
> >
> > Bom ate então, com a ajuda de vocês a tarefa parecia simples mas quando
> me
> > deparei que tem cidade com um nome maior que do de DOM PEDRO PRIMEIRO, e
> que
> > não conseguia buscar com um padrão o Status e nem o nome do Cliente pois
> o
> > numero de espaços é enorme e quase não é mensurável.
> >
> > Como fazer para pegar a String com espaços tanto no nome do Cliente (
> > Arquivo de entrada) e do so Status na pesquisa do site ( sabendo que tem
> > Cidades com nomes muito grandes)
> >
> > o meu simplório script segue:
> >
> > Vide exemplo 4 do pastebin:
> >
> > Se eu jogo o resultado da busca no site em uma variável RESULTADO da
> > busca no site e tento pegar somente o que me interessa assim:
> >
> > echo $RESULTADO | awk '{ print $1 ";" $2 ";" $4 }'
> >
> > Não Consigo pegar Somente o Status pois tenho Status Diversos como
> entregue
> > e Aguardando retirada. O mesmo ocorre qdo tento pegar o nome do Cliente
> que
> > tem espaços. ja no caso do Cliente eu poderia remover os Espaços do
> Arquivo
> > e trocar por UNDERLINE mas como proceder no retorno do Site?
> >
> > Julio, como estou comendo o Seu LIVRINHO ( HE HE HE ), Aliás muito bom e
> > estou engatinhando nas ER's poderia me explicar a Sua onlinER ? pois não
> > funcionou aqui comigo. Quando vc se refere a arquivo na ER:
> >
> >
> > grep -A2 '[0-3][0-9]/[0-1][0-9]/20[0-1] [0-9] [0-2][0-9]:[0-5][0-9]'
> arquivo
> > | tail -2 | tr -d '\n'
> >
> > Não entendi pois o retono é via pesquisa do Lynx e tambem havia
> substituido
> > pela ER do Cristiano e não deu certo.
> >
> >
> > valeu mesmo a ajuda e contem comigo no que eu puder ajudar!
>
> Ilustre Ernander.
>
> Se você tem o livro do Júlio, dá uma procurada nele sobre a variável $IFS
> (internal field separator). É por ela que você começa a solução do seu
> problema.
>
> Primeiro, você não precisa passar a linha inteira no while e depois ficar
> cortando ela para achar os seus campos. Teu arquivo de origem é um CSV
> (delimitado por ";"), você já tem os campos separados. Basta informá-los ao
> while com uma sintaxe parecida com isto:
>
> while read VAR1 VAR2 ... VARn ; do
> comando1
> comando2
> done < /tmp/arquivo_origem.txt
>
> Para cada campo no seu arquivo de origem, informe o nome de uma variável
> após o read (CAMPO1=VAR1, CAMPO2=VAR2, etc.).
>
> Daí, é só pegar o campo certo e fazer o que precisa com ele dentro do laço.
>
> Porém, para que isso aconteça, é necessário que o shell reconheça que os
> ";" do seu arquivo original são os separadores de campos. Por padrão, o IFS
> do bash é o caracter espaço. Para mudar isso, basta, antes do laço (while),
> mudar o IFS; atribuindo outro valor para a variável $IFS.
>
> Porém, antes de mudar o valor, lembre-se de guardar o original em outra
> variável, e voltar a ele logo após o fim do laço (done). Senão, "coisas
> estranhas" podem acontecer.
>
> Outro detalhe. Para concatenar o BR no número do track, você não precisa
> fazer isso:
>
> ENCOMENDA=`echo $CODIGO`BR
>
> Basta um ENCOMENDA="$CODIGO"BR. Assim, você evita chamar mais um processo
> desnecessário (o echo) e concatena o "BR" no momento que o bash faz a
> expansão das variáveis. (isso também tá no livro do tio Júlio).
>
> Aliás, no seu caso, você nem precisa se dar o trabalho de fazer isso, basta
> acrescentar o BR como parte da URL que passa ao lynx. Economiza mais uma
> etapa no script.
>
> Já o problema do tamanho do nome da cidade você resolve fácil.
>
> Lembra da dica do Júlio, de trocar o meu sed pelo tr? Adapta ela.
>
> Usa o tr, mas ao invés de fazer com parametro -d, para excluir a ocorrência
> da quebra de linha, troca por um caracter qualquer, que te servirá de
> marcador para um cut. Por exemplo o #.
>
> Assim, você faz um cut para pegar a data, outro para a hora (usando o
> espaço como delimitador) e um outro cut para pegar o staus (usando o # como
> delimtador). Pode também trocar os dois primeiros cuts por um um while,
> usando a mesma lógica que te expliquei no início.
>
> Então, dentro do laço, você joga o resultado da pesquisa vinda do lynx em
> uma variável, depois corta ela e atribui a data em uma variável, a hora em
> outra, e o status em outra.
>
> Como você já tem os valores do arquivo original é só fazer um echo com
> todas variáveis (as que vieram do links e as do arquivo original),
> intercalados com os ";", e terá a saída redondinha.
>
> Geralmente não gosto de postar o script pronto, pois acho que te tira a
> possibilidade de aprender. Então, tenta escrever ele aí que mais tarde e
> posto o meu para você comparar. Até mesmo porque, agora o site dos correios
> está um coco de lento e não vou postar o script sem testá-lo.
>
> Abraço
>
> Cristiano
>
> Abraço
>
>  
>



-- 
╔═══════════════════╗
║ Ernander Lataliza ║
╚═══════════════════╝
--------------------------------------
SEJA LIVRE! USE LINUX!
Linux User #394812
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.6 (GNU/Linux)

mQGiBEnrmpwRBADsGwMo8R2spUxfer19bGyX5mAXRyEhm5vlzkOH9T7Fe4WyAvLM
rDpSKjv1VgcC3/fSMpPQ8MmQZwwO4H87IIwyN0AX/NqvmEQDNMVZS6omrcN39jpt
xEC80Hs/TP/yKyB2V6seHV0eZtjlfmokIb7nYazcxTLAhiv9CVg9nL+JCwCg+gNL
R+1rQcqGooGtjIL95OZr/8kEANpGy/Jb+B7Ajq4gatJ6qoedDyeyFFDRz8aV1OBJ
TCRh9T8MWjOhwvgcsGQV7R95VHgJNVGnej6yilMoM3NtIcyA2tbXAUerp5QhRAAi
2BU50z2JF5wl7YQ5ocSpOxp5Cq4sEBJYa/gTUzbLzztNc+ezCIKV403kEbE2IqSV
9rt3A/4vxcKsh9IX1At+vH9Ev850CXlRyxN4H7tRlGL+OdqQ76SR3tMi1qm4NRIp
p0Y7gJ8k9YdfWCgm56aLlSCCXlr80TXP5WHEH+sz2yDrw6iCj5ABeBMA5tdTae5y
bpx9QJgu5+1dYAK+FFWM+czPO11FM6nOKC3N+XSvrmM88dQhg7RHRXJuYW5kZXIg
TWFyY3VzIExhdGFsaXphIFJvc2VuZG8gKE5hbmRlciBMYXRhbGl6YSkgPGVybmFu
ZGVyQGdtYWlsLmNvbT6IYAQTEQIAIAUCSeuanAIbAwYLCQgHAwIEFQIIAwQWAgMB
Ah4BAheAAAoJEKahazXSKEoo15oAoPBiOWjUw0I2a6u7MtDPPwNPebG3AKDsoBuT
tcC4MzB17iNsOq819aV42rkBDQRJ65qdEAQApuFxoXRdeQrFIOJDyxE2EQi3GZby
2RP0+6iWiLbMk3XUGVsc477NTeGkEuDQA0SpkA5whL4wHWHCrYaE9rtmYMYW67ml
z/PUPWGI78cQ/R7M1ADPLGaD7cSxfdWzIHbhkP29x4zHTkSrdl4zT+XOHXwmAULp
ekzuKdb6whw676MAAwUD/isUOzlyF5sf/Q7RJRmLjOEEn5gpL/pf7ZzWHNxgxsPH
s1LlicO2yObH1cuVDXQDsc3a6ag61z1gCapa8Q1L/E5akKpU0irRzf99yNVzTp3i
BD9cua7h7fnfBMp6D4EyLDnUkCxOMD5HdIik1Ie6iHoVdCeDpYFnv72RplPI3dBB
iEkEGBECAAkFAknrmp0CGwwACgkQpqFrNdIoSiiUYgCgvHpf/Tkub4sWz/Vj91y6
BgH84hQAn3Z8pVMAUMJmmH/jRqJg49SS8AHc
=1sQ8
-----END PGP PUBLIC KEY BLOCK-----


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]