Entrar
Usuário novo? Cadastre-se
shell-script · Lista brasileira sobre Linux Shell Script
? Você já é um associado? Entre no Yahoo!

Dicas

Você sabia...
Você pode ordenar suas mensagens por data? Basta clicar no link da coluna data. Suas preferências serão lembradas para que você não precise fazer isso novamente sempre que retornar.

Mensagens

  Ajuda
Avançado
Ajuda Rastreamento Correios   Lista de mensagens  
Responder | Encaminhar Mensagem #29582 de 30440 |
Re: Ajuda Rastreamento Correios

--- Em shell-script@..., "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










Qui, 9 de Jul de 2009 3:49 pm

box_ferrari
Offline Offline
Enviar e-mail Enviar e-mail

Encaminhar Mensagem #29582 de 30440 |
Expandir mensagens Nome/E-mail Classificar por data

Senhores boa Tarde! preciso de uma Ajudinha básica: To fazendo um Shell para rastrear algumas encomendas aki da empresa. Ela deve buscar pela registro do...
Ernander (Nander)
ernander2004
Offline Enviar e-mail
6 de Jul de 2009
6:31 pm

... Ernander, boa tarde. Vamos por partes, como diria o Jack. First of all, 2 conselhos: 1. Não use e-mail em formato HTML. Nem todos na lista recebem este...
Cristiano Ferrari
box_ferrari
Offline Enviar e-mail
6 de Jul de 2009
9:35 pm

Cara, dá uma olhada no script do Leo Boiko: http://namakajiri.net/complog/watch-encomenda-sh/ Pode te dar umas idéias legais sobre a resolução do problema....
klayson sesana bonatto
klaysonbonatto
Offline Enviar e-mail
6 de Jul de 2009
11:16 pm

Traduzindo isso tudo para um one-liner e simplificando a ER, vem: grep -A2 '[0-3][0-9]/[0-1][0-9]/20[0-1][0-9] [0-2][0-9]:[0-5][0-9]' arquivo ... A...
Julio C. Neves
julioneves99
Offline Enviar e-mail
7 de Jul de 2009
1:53 pm

... Hash: SHA1 Olá Ernander! No site do funcoesZZ do Aurelio, nas funçoes extras tem uma chamada zzrastreamento que é justamente pra rastrear entregas dos...
Anderson Duarte
andersonrizada@...
Enviar e-mail
7 de Jul de 2009
5:05 pm

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...
Ernander (Nander)
ernander2004
Offline Enviar e-mail
9 de Jul de 2009
2:19 pm

Sem o link do pastebin não rola né? perdão novamente! http://ubuntu.pastebin.com/m5129cc6b Att Ernander 2009/7/9 Ernander (Nander) <ernander@...> ...
Ernander (Nander)
ernander2004
Offline Enviar e-mail
9 de Jul de 2009
2:21 pm

... 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...
Cristiano Ferrari
box_ferrari
Offline Enviar e-mail
9 de Jul de 2009
3:50 pm

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...
Ernander (Nander)
ernander2004
Offline Enviar e-mail
9 de Jul de 2009
5:40 pm

Fala Nander, Não estou chamando a tua atenção, mas te dando uma dica: os Correios são grande usuários de Sw Livre e, portanto, deve ter um monte de...
Julio C. Neves
julioneves99
Offline Enviar e-mail
9 de Jul de 2009
10:28 pm
Avançado

Copyright © 2009 Yahoo! do Brasil Internet Ltda. Todos os direitos reservados.
Política de Privacidade - Termos do Serviço - Diretrizes - Ajuda