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

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

Re: [shell-script] AJuda com a formatação do printf quando com palavras


From: Lawrence Waclawiak
Subject: Re: [shell-script] AJuda com a formatação do printf quando com palavras que possuam acento.
Date: Tue, 20 Apr 2010 11:25:05 -0300
User-agent: Thunderbird 2.0.0.24 (X11/20100317)

Fala Mestre Júlio!

Então Júlio, na verdade eu tava bem contente com a solução que arrumei para o trunk, vc viu o programa então lembra que o que eu precisava era pegar várias variáveis que possuem informações a cerca de usuários e imprimir em forma de uma lista com 7 colunas. Eu já tinha lido a pagina 225 e vi que com o printf da pra fazer o trunk usando %."Num"s, porém eu não consegui juntar esse trunk com a formatação da tabulação usando %-"Num"s com o complicante que minha tabulação tem de ser relativa ao numero de colunas capturado pelo tput, então fiz separado, a tabulação direto pelo printf e usei expansão de variáveis para truncar a variável em si. O resultado que obtive foi excelente, deu certinho, mesmo que deixe a tela minúscula ele mantem o alinhamento das colunas e trunca o conteúdo delas.
Veja como ficou:

COLUNAS=`tput cols`

TAB=$(($COLUNAS / 7))

printf "%-"$TAB"s%-"$TAB"s%-"$TAB"s%-"$TAB"s%-"$TAB"s%-"$TAB"s%-"$TAB"s\n" "${USER:0:$[$TAB - 3]}" "${NOMECOMPLETO:0:$[$TAB - 3]}" "${GRUPO:0:$[$TAB - 3]}" "${STATUS:0:$[$TAB - 3]}" "${LPROFILE:0:$[$TAB - 3]}" "${LHOME:0:$[$TAB - 3]}" "${LASTMOD:0:$[$TAB - 3]}"

Mas isso é problema passado, o meu problema é relativo á acentuação, me parece que o printf não gosta muito dela e é bem simples para vc ver o que eu to falando sem ter de usar esse monte de comandos ai, basta abrir o bash e colar o comando:
printf "%-10s%-10s\n" A B;printf "%-10s%-10s\n" Á B
A----------B
Á---------B

Obs:Eu substitui os espaços em branco por "-" pois nossa lista de e-mail remove os espaços em branco duplicados. O que vc pode ver é que quando usei A e B sem acentos foi respeitado o espaçamento de 10 casas entre elas, porém quando acentuei o Á passei a ter apenas 9 casas entre Á e B na saída, esse que é meu problema e para cada letra acentuada impressa o printf come uma casa, veja esse outro exemplo mais drástico:

printf "%-10s%-10s\n" AAAAAA BBBBBB;printf "%-10s%-10s\n" ÁÁÁÁAA BBBBBB
AAAAAA----BBBBBB
ÁÁÁÁAABBBBBB
Nesse exemplo usei 4 Á e dessa forma o printf comeu 4 casa e colou os AAs nos BBs

E ai, pra essa eu não achei resposta no livro, se bem que tbm não deu pra ler tudo ainda mas por consulta não achei.

Help-me??

Julio C. Neves escreveu:

Fala Law,
eu te pedi para ler a seção correspondente ao printf e, pelo visto, vc não
leu e, por isso, está montando um Frankstein. Vou ser mais específico, mas
não vou te dar a resposta: leia pelo menos a página 225 que vc verá como
truncar.

Abraços,
Julio
Cursos de Shell e Zenity em 2 fins de semana?
- Aracaju turma de Shell em 12/05 - address@hidden <mailto:andersonrizada%40gmail.com>;
- RJ turma de Shell em 14/06 - ligue (21)2210-6061;
- Turmas fechadas em outras cidades ligue (21) 8112-9988.

Em 19 de abril de 2010 18:52, Lawrence Waclawiak
<address@hidden <mailto:lawrencebbw%40yahoo.com.br>>escreveu:

> O problema de trucar eu já resolvi utilizando expansão de variáveis da
> seguinte forma:
>
> TAB=23;printf "%-$[TAB]s%-$[TAB]s\n" "${NOMECOMPLETO:0:$[$TAB - 1]}"
> "${GRUPO:0:$[$TAB - 1]}"
> Dessa forma a saida sempre é truncada com o tamanho da TAB - 1
>
> Mas persiste o problema principal referente à acentuação.
>
> ALguém tem mais alguma idéia ?
>
>
>
> Lawrence Waclawiak escreveu:
> > Opa.
> > Seguinte, o liguagem está em en_US.UTF-8
> > troquei a liguagem no script para pt_BR.UTF-8 mas não adiantou nada.
> > Você chegou a testar ai no seu pc se o desalinhamento ocorre?
> >
> >
> > Bruno Gunter escreveu:
> >
> >> Que tal usar UTF-8?
> >> Deve resolver teu problema.
> >>
> >> Para confirmar se você está usando o UTF-8, faça:
> >>
> >> set | grep UTF
> >>
> >> Que deve retornar algo como:
> >> GDM_LANG=pt_BR.UTF-8
> >> LANG=pt_BR.UTF-8
> >>
> >> []'s
> >> Gunter
> >>
> >> Em 19 de abril de 2010 17:36, Lawrence Waclawiak
> >> <address@hidden <mailto:lawrencebbw%40yahoo.com.br> <mailto:lawrencebbw%40yahoo.com.br<lawrencebbw%2540yahoo.com.br>
> >>escreveu:
> >>
> >>
> >>> Galera, vi que aki parece alinhado, deve ser alguma coisa do e-mail mas
> >>> não fica alinhado no bash.
> >>> Tem de jogar o comando no Bash pra ver.
> >>>
> >>> Lawrence Waclawiak escreveu:
> >>>
> >>>> E ai galera? na Paz?
> >>>> Venho pedir a ajuda dos caros colegas com relação ao comando printf.
> >>>>
> >>>> No meu trabalho eu estou desenvolvendo um script para comptrolar
> >>>>
> >> um PDC
> >>
> >>>> em samba e para as funções de pesquisa e listagem de usuários eu
> >>>>
> >> utilizo
> >>
> >>>> o printf para formatar a saida, juntamente com o tput para calcular as
> >>>> colular e consegquentemente o espaçamento necessário entre elas.
> >>>>
> >>>> O problema que estou enfrentando é que quando imprimo alguma
> >>>>
> >> string que
> >>
> >>>> possua acento o printf puxa a formatação uma casa para esquerda nessa
> >>>> respectiva linha para cada caracter acentuado, detonando a
> >>>>
> >> formatação da
> >>
> >>>> lista.
> >>>>
> >>>> O exemplo abaixo mostra o que estou falando
> >>>>
> >>>> [root@ProxyP15 samba]# TAB=23;printf "%-$[TAB]s%-$[TAB]s\n" "ÁÁAAAA"
> >>>> "BBBB"; printf "%-$[TAB]s%-$[TAB]s\n" "AAAAAA" "BBBB"
> >>>> ÁÁÁAAA BBBB
> >>>> AAAAAA BBBB
> >>>> [root@ProxyP15 samba]# TAB=23;printf "%-$[TAB]s%-$[TAB]s\n" "ÁAAAAA"
> >>>> "BBBB"; printf "%-$[TAB]s%-$[TAB]s\n" "AAAAAA" "BBBB"
> >>>> ÁAAAAA BBBB
> >>>> AAAAAA BBBB
> >>>> [root@ProxyP15 samba]# TAB=23;printf "%-$[TAB]s%-$[TAB]s\n" "AAAAAA"
> >>>> "BBBB"; printf "%-$[TAB]s%-$[TAB]s\n" "AAAAAA" "BBBB"
> >>>> AAAAAA BBBB
> >>>> AAAAAA BBBB
> >>>> [root@ProxyP15 samba]#
> >>>>
> >>>> Só pra constar já tentei colocar o AAAAAA sem aspas, com aspas duplas > >>>> como está no exemplo e com aspas simples tbm, dá tudo na mesma, sai do
> >>>> alinhamento.
> >>>> Não caso eu não encontre uma solução irei partir para passar o TR
> >>>> removendo os acentos de tudo, mas como se trata de Nomes preferia não
> >>>> fazer isso.
> >>>> Já aproveitando a deixa se alguém souber como faço para truncar o
> >>>>
> >> número
> >>
> >>>> de caracteres de uma variável impressa pelo printf seria de grande
> >>>>
> >> ajuda
> >>
> >>>> tbm.
> >>>>
> >>>> Grato,
> >>>> Lawrence Waclawiak
> >>>>
> >>>>
> >>>>
> >>>
> >>>
> >>> ------------------------------------
> >>>
> >>> ----------------------------------------------------------
> >>> Esta lista não admite a abordagem de outras liguagens de
> >>>
> >> programação, como
> >>
> >>> perl, C etc. Quem insistir em não seguir esta regra será moderado
> >>>
> >> sem prévio
> >>
> >>> aviso.
> >>> ----------------------------------------------------------
> >>> Sair da lista: address@hidden <mailto:shell-script-unsubscribe%40yahoogrupos.com.br>
> >>>
> >> <mailto:shell-script-unsubscribe%40yahoogrupos.com.br<shell-script-unsubscribe%2540yahoogrupos.com.br>
> >
> >>
> >>> ----------------------------------------------------------
> >>> Esta lista é moderada de acordo com o previsto em
> >>> http://www.listas-discussao.cjb.net <http://www.listas-discussao.cjb.net>
> >>>
> >> <http://www.listas-discussao.cjb.net <http://www.listas-discussao.cjb.net>>
> >>
> >>> ----------------------------------------------------------
> >>> Servidor Newsgroup da lista: news.gmane.org
> >>> Grupo: gmane.org.user-groups.programming.shell.brazil
> >>>
> >>> Links do Yahoo! Grupos
> >>>
> >>>
> >>> [image: InfoLink - Hospedagem de Sites]
> >>>
> >> *Bruno Gunter*
> >> Equipe InfoLink Hospedagem
> >> address@hidden <mailto:gunter%40infolink.com.br> <mailto:gunter%40infolink.com.br<gunter%2540infolink.com.br>
> >
> >> <address@hidden <mailto:gunter%40infolink.com.br> <mailto:gunter%40infolink.com.br<gunter%2540infolink.com.br>
> >>
> >> www.infolink.com.br
> >> Tel.: 2104-1932
> >>
> >> [As partes desta mensagem que não continham texto foram removidas]
> >>
> >>
> >>
> >
> >
> >
> >
> > ------------------------------------
> >
> > ----------------------------------------------------------
> > Esta lista não admite a abordagem de outras liguagens de programação,
> como perl, C etc. Quem insistir em não seguir esta regra será moderado sem
> prévio aviso.
> > ----------------------------------------------------------
> > Sair da lista: address@hidden <mailto:shell-script-unsubscribe%40yahoogrupos.com.br>
> > ----------------------------------------------------------
> > Esta lista é moderada de acordo com o previsto em
> http://www.listas-discussao.cjb.net <http://www.listas-discussao.cjb.net>
> > ----------------------------------------------------------
> > Servidor Newsgroup da lista: news.gmane.org
> > Grupo: gmane.org.user-groups.programming.shell.brazil
> >
> > Links do Yahoo! Grupos
> >
> >
> >
> >
>
>
>
>
> ------------------------------------
>
> ----------------------------------------------------------
> Esta lista não admite a abordagem de outras liguagens de programação, como > perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio
> aviso.
> ----------------------------------------------------------
> Sair da lista: address@hidden <mailto:shell-script-unsubscribe%40yahoogrupos.com.br>
> ----------------------------------------------------------
> Esta lista é moderada de acordo com o previsto em
> http://www.listas-discussao.cjb.net <http://www.listas-discussao.cjb.net>
> ----------------------------------------------------------
> Servidor Newsgroup da lista: news.gmane.org
> Grupo: gmane.org.user-groups.programming.shell.brazil
>
> Links do Yahoo! Grupos
>
>
>

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





reply via email to

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