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: Thu, 22 Apr 2010 15:11:01 -0300
User-agent: Thunderbird 2.0.0.23 (X11/20090817)

Se eu fosse fazer um programa para rodar em sempre em um pc, sempre com a mesma resolução e com a janela maximizada o \t resolveria o problema, mas como tenho que pensar quer a pessoa poderá rodar o programa de qualquer pc, com qualquer resolução e tamanho de janela, ai ele não serve
Veja só um exemplo bem simples:
Maximiza a sua janela e dispara esse comando:
printf "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n" ÁÁAAAAAAAAAAAAAAAAAAAAAAA BBBBBBBBB AAAAAAAAAA BB AAAAAAAAAAAAAA BBBBBBBBBBBBBBBBBBBBBBBBBBB AAAAAAAAAA BBBBBB AAAAAAA BBBB

Agora deixa ela de um tamanho médio e dispara o mesmo comando de novo.
Você vai ver que ele vai dar a saída em duas linhas, dessa forma já estragaria a lista.

Veja o que aconteceria com esse outro comando em tela grande mesmo:
printf "%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n" ÁÁAAAAAAAAAAAAAAAAAAAAAAA BBBBBBBBB AAAAAAAAAA BB AAAAAAAAAAAAAA BBBBBBBBBBBBBBBBBBBBBBBBBBB;printf "%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n" ÁÁAAA BBBBBBBBBBBBBBBBBBBB AAAAAAAAAA BB AAAAAAAAAAAAAA BBBBBBBBBBBBBBBBBBBBBBBBBBB

As colunas vão ficar desalinhadas pois o primeiro campo é maior que um \t(tab), dai vc poderia dizer para eu truncar cada saída a um tamanho X que fosse um pouco menor que um tab, certo? Mas ai o que aconteceria seria que se a tela estivesse muito pequena possivelmente o printf imprimiria as informações em 2 ou mais linhas e caso a janela estivesse grande ele exibiria vários compos com informação truncada sendo que teria espaço sobrando, dessa forma não vejo como utilizar um \t

Se vc voltar no ultimo e-mail que mandei para o Júlio vc verá que eu não uso um espaçamento fixo, só dei o exemplo com 10 para ficar simples de reproduzi-lo, eu na verdade com o tput capturo o numero de colunas disponíveis na tela, divido pelo numero de colunas que irei usar em minha lista(No caso são 7) pego esse numero e utilizo como espaçamento para a listagem e ainda pego novamente esse numero e subtraio - 3 e utilizo para truncar as informações, dessa forma o espaçamento sempre se adaptará da melhor maneira possível ao tamanho da tela e sempre teremos no mínimo 3 casas separando as colunas.

O que eu ainda não entendo é como tratar os acentos@!




Ederson Almeida escreveu:

OK! To brigando aqui para achar uma solução, agora lhe pergunto, o que interfere você trocar o espaçamento fixo definido em -10 por um TAB(ou o que imagino o \t fazer)?

"%-10s%-10s\ n" A B;printf "%-10s%-10s\ n" Á B
A----------B
Á---------B

printf "%s\t\t%s\n" A B;printf "%s\t\t%s\n" Á B
A B
Á B

Att,

Ederson Dantas de Almeida.

--- Em ter, 20/4/10, Lawrence Waclawiak <lawrencebbw@ yahoo.com. br <mailto:lawrencebbw%40yahoo.com.br>> escreveu:

De: Lawrence Waclawiak <lawrencebbw@ yahoo.com. br <mailto:lawrencebbw%40yahoo.com.br>> Assunto: Re: [shell-script] AJuda com a formatação do printf quando com palavras que possuam acento. Para: shell-script@ yahoogrupos. com.br <mailto:shell-script%40yahoogrupos.com.br>
Data: Terça-feira, 20 de Abril de 2010, 14:25

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 - andersonrizada@ gmail.com <mailto:andersonrizada%40gmail.com>
> <mailto:andersonriz ada%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
> <lawrencebbw@ yahoo.com. br <mailto:lawrencebbw%40yahoo.com.br> <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
> > >> <lawrencebbw@ yahoo.com. br <mailto:lawrencebbw%40yahoo.com.br> <mailto:lawrencebbw %40yahoo. com.br>
> <mailto:lawrencebbw %40yahoo. com.br<lawrenceb bw%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: shell-script- unsubscribe@ yahoogrupos. com.br <mailto:shell-script-unsubscribe%40yahoogrupos.com.br>
> <mailto:shell- script-unsubscri be%40yahoogrupos .com.br>
> > >>>
> > >>
> <mailto:shell- script-unsubscri be%40yahoogrupos .com.br<shell- script-unsubscri be%2540yahoogrup os.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>>
> > >>>
> > >> <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.programmi ng.shell. brazil
> > >>>
> > >>> Links do Yahoo! Grupos
> > >>>
> > >>>
> > >>> [image: InfoLink - Hospedagem de Sites]
> > >>>
> > >> *Bruno Gunter*
> > >> Equipe InfoLink Hospedagem
> > >> gunter@infolink. com.br <mailto:gunter%40infolink.com.br> <mailto:gunter% 40infolink. com.br>
> <mailto:gunter% 40infolink. com.br<gunter% 2540infolink. com.br>
> > >
> > >> <gunter@infolink. com.br <mailto:gunter%40infolink.com.br> <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: shell-script- unsubscribe@ yahoogrupos. com.br <mailto:shell-script-unsubscribe%40yahoogrupos.com.br>
> <mailto:shell- script-unsubscri be%40yahoogrupos .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.programmi ng.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: shell-script- unsubscribe@ yahoogrupos. com.br <mailto:shell-script-unsubscribe%40yahoogrupos.com.br>
> <mailto:shell- script-unsubscri be%40yahoogrupos .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.programmi ng.shell. brazil
> >
> > Links do Yahoo! Grupos
> >
> >
> >
>
> [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: shell-script- unsubscribe@ yahoogrupos. com.br <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.programmi ng.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]