:TITLE: Modificando strings - tolower, toupper, trim, format
;#
;# RCSID: $Header: /home/cvs/TclTutor3/lesson/Tcl_Portuguese/Tcl_Portuguese19.lsn,v 1.1 2008/08/02 12:37:36 clif Exp $
;# Copyright (c) 1995 Clif Flynt
;# 9300 Fleming Rd.
;# Dexter, MI  48130
;# clif@cflynt.com
;# Veja o arquivo "AVISO" com os termos da licença.
;#
;#*********************************************************
;# Portuguese translation: Lucio Agostinho Rocha
;# E-mail: outrosdiasvirao@yahoo.com.br
;# Last update: 04/01/2006
;#*********************************************************
:LESSON_TEXT_START_LEVEL 0:
Há comandos que modificam uma string. Nenhum desses modificam
a string diretamente.
<DL>
<B><DT>string tolower</B> <I>string</I>
<DD> Retorna a <I>string</I> com todas as letras convertidas de maiúsculas
para minúsculas.
<B><DT>string toupper</B> <I>string</I>
<DD> Retorna a <I>string</I> com todas as letras convertidas de minúsculas
para maiúsculas.
<B><DT>string trim</B> <I>string ?caracteresTrim?</I>
<DD> Retorna a <I>string</I> com todas as ocorrências de 
<I>caracteresTrim</I> removidas de ambos os lados da string.
Por padrão, <I>caracteresTrim</I> são espaços em branco (espaços, tabulações,
caracteres de nova linha).
<B><DT>string trimleft</B> <I>string ?caracteresTrim?</I>
<DD> Retorna a <I>string</I> com todas as ocorrências de <I>caracteresTrim</I> 
removidas do lado esquerdo da string. Por padrão <I>caracteresTrim</I> são espaços
em branco (espaços, tabulações, caracteres de nova linha).
<B><DT>string trimright</B> <I>string ?caracteresTrim?</I>
<DD> Retorna a <I>string</I> com todas as ocorrências de <I>caracteresTrim</I> 
removidas do lado direito da string. Por padrão <I>caracteresTrim</I> 
são espaços em branco (espaços, tabulações, caracteres de nova linha).
<B><DT>format</B> <I>formatoString ?arg1 arg2 ... argN?</I>
<DD> Retorna uma string formatada da mesma forma que o procedimento
ANSI <B>sprintf</B>.  <I>formatoString</I> é uma string incluindo 
referências <B>% seqüência</B> que definem o formato para o
respectivo <I>arg</I>.
</DL>
:TEXT_END:

:LESSON_TEXT_START_LEVEL 1:
Esses são os comandos que modificam uma string.
Note que nenhum desses comandos modificam diretamente a string.
Em todos os casos uma nova string é retornada.
<DL>
<B><DT>string tolower</B> <I>string</I>
<DD> Retorna a <I>string</I> com todas as letras convertidas de maiúsculas
para minúsculas.
<B><DT>string toupper</B> <I>string</I>
<DD> Retorna a <I>string</I> com todas as letras convertidas de minúsculas
para maiúsculas.
<B><DT>string trim</B> <I>string ?caracteresTrim?</I>
<DD> Retorna a <I>string</I> com todas as ocorrências de 
<I>caracteresTrim</I> removidas de ambos os lados da string.
Por padrão, <I>caracteresTrim</I> são espaços em branco (espaços, tabulações,
caracteres de nova linha).
<B><DT>string trimleft</B> <I>string ?caracteresTrim?</I>
<DD> Retorna a <I>string</I> com todas as ocorrências de <I>caracteresTrim</I> 
removidas do lado esquerdo da string. Por padrão <I>caracteresTrim</I> são espaços
em branco (espaços, tabulações, caracteres de nova linha).
<B><DT>string trimright</B> <I>string ?caracteresTrim?</I>
<DD> Retorna a <I>string</I> com todas as ocorrências de <I>caracteresTrim</I> 
removidas do lado direito da string. Por padrão <I>caracteresTrim</I> 
são espaços em branco (espaços, tabulações, caracteres de nova linha).
<B><DT>format</B> <I>formatoString ?arg1 arg2 ... argN?</I>
<DD> Retorna uma string formatada da mesma forma que o procedimento
ANSI <B>sprintf</B>. <I>formatoString</I> é uma descrição 
da formatação que será utilizada.
<P>
A descrição completa deste protocolo está na página do manual
do comando <CODE>format</CODE>.
Um subconjunto útil da definição é que <I>formatoString</I> consiste de
palavras, seqüências de barra invertida, e <B>campos %</B>. Os <B>campos %</B>
são strings que iniciam com um <B>%</B> e terminam com um dos seguintes:
<UL COMPACT>
<B><LI>s</B>... O dado é uma string
<B><LI>d</B>... O dado é um inteiro decimal
<B><LI>x</B>... O dado é um inteiro hexadecimal
<B><LI>o</B>... O dado é um inteiro octal
<B><LI>f</B>... O dado é um número de ponto flutuante
</UL>
O <B>%</B> pode ser seguido por:
<UL COMPACT>
<B><LI>-</B>... Justifica à esquerda o dado neste campo
<B><LI>+</B>... Justifica à direita o dado neste campo
</UL>
O valor de justificação pode ser seguido por um número que fornece
o número mínimo de espaços para uso pela string.
</DL>
:TEXT_END:

:LESSON_TEXT_START_LEVEL 2:
O comando Tcl <CODE>string</CODE> também inclui muitos comandos que irão
modificar uma string. Quando um desses comandos é usado, ele retorna uma
nova string modificada, e deixa a string original intacta. Se você deseja
substituir a string original você pode atribuir a nova string à string
original.
<P>
Tcl também inclui um comando que pegará dados de diversas fontes e
criará uma nova string. O comando <CODE>format</CODE> simplifica a
criação de strings com uma quantidade particular de dados formatados
em uma forma particular.
<DL>
<B><DT>string tolower</B> <I>string</I>
<DD>Retorna a <I>string</I> com todas as letras convertidas de maiúsculas
para minúsculas.
<B><DT>string toupper</B> <I>string</I>
<DD> Retorna a <I>string</I> com todas as letras convertidas de minúsculas
para maiúsculas.
<B><DT>string trim</B> <I>string ?caracteresTrim?</I>
<DD> Retorna a <I>string</I> com todas as ocorrências de 
<I>caracteresTrim</I> removidas de ambos os lados da string.
Por padrão, <I>caracteresTrim</I> são espaços em branco (espaços, tabulações,
caracteres de nova linha).
<B><DT>string trimleft</B> <I>string ?caracteresTrim?</I>
<DD> Retorna a <I>string</I> com todas as ocorrências de <I>caracteresTrim</I> 
removidas do lado esquerdo da string. Por padrão <I>caracteresTrim</I> são espaços
em branco (espaços, tabulações, caracteres de nova linha).
<B><DT>string trimright</B> <I>string ?caracteresTrim?</I>
<DD> Retorna a <I>string</I> com todas as ocorrências de <I>caracteresTrim</I> 
removidas do lado direito da string. Por padrão <I>caracteresTrim</I> 
são espaços em branco (espaços, tabulações, caracteres de nova linha).
<B><DT>format</B> <I>formatoString ?arg1 arg2 ... argN?</I>
<DD> Retorna uma string formatada da mesma forma que no
procedimento ANSI <B>sprintf</B>. <I>formatoString</I> é uma descrição 
da formatação que será utilizada.
<P>
A descrição completa deste protocolo está na página do manual
do comando <CODE>format</CODE>.
Um subconjunto útil da definição é que <I>formatoString</I> consiste de
palavras, seqüências de barra invertida, e <B>campos %</B>. Os <B>campos %</B>
são strings que iniciam com um <B>%</B> e terminam com um dos seguintes:
<UL COMPACT>
<B><LI>s</B>... O dado é uma string
<B><LI>d</B>... O dado é um inteiro decimal
<B><LI>x</B>... O dado é um inteiro hexadecimal
<B><LI>o</B>... O dado é um inteiro octal
<B><LI>f</B>... O dado é um número de ponto flutuante
</UL>
O <B>%</B> pode ser seguido por:
<UL COMPACT>
<B><LI>-</B>... Justifica à esquerda o dado neste campo
<B><LI>+</B>... Justifica à direita o dado neste campo
</UL>
O valor de justificação pode ser seguido por um número que fornece
o número mínimo de espaços para uso da string.
</DL>
<P>
O argumento <I>formatoString</I> para o comando <CODE>format</CODE> precisa
de um pouco mais de explicação.
<P>
Um simples formato de string seria representado apenas por "%s". Isso exibiria o
<I>arg</I> como uma string simples. Ou seja:
<PRE>
set xx [format "%s" "Isso é um teste"]
e
set xx "Isso é um teste"
</PRE>
são declarações equivalentes.  
<P>
O comando <CODE>format</CODE> é mais útil quando você está construindo
tabelas, e quer que cada entrada preencha o mesmo número de espaços,
ou quando você está lidando com números de ponto flutuante e quer
controlar a precisão que é exibida.
<P>
O exemplo abaixo mostra o comando <CODE>format</CODE> sendo usado para
criar uma simples tabela. A string <CODE>%-20s</CODE> coloca o primeiro
<I>arg</I> em um campo de 20 espaços, e coloca o primeiro caracter de
<I>arg</I> no espaço mais à esquerda dos 20 espaços. Isso é chamado
<B>justificação à esquerda</B>.
<P>
A string <CODE>%10s</CODE> coloca o segundo <I>arg</I> em um campo de 10
espaços, com o último caracter do <I>arg</I> no espaço mais à direita
do campo. Isso é uma <B>justificação à direita</B>, e é o modo padrão
para strings.
<P>
A string <CODE>%10d</CODE> trata o segundo <I>arg</I> como um inteiro,
e o justifica à direita.
<P>
Na última declaração de format, o <B>%10.2f</B> formata o <I>arg</I>
com 10 espaços, 2 dos quais são para a parte direita do decimal. Note que
o estilo de preço do Pentium é arredondado para o centavo mais próximo.
:TEXT_END:

:CODE_START:
set maiusculo "ESTA É UMA STRING COM TODAS AS LETRAS MAIÚSCULAS"
set minusculo "esta é uma string com todas as letras minúsculas"
set caracteresAposString "Esta é uma string com pontos após a string principal ...."
set caracteresAntesString "....Esta é uma string com pontos antes da string principal"
set caracteresAntesEAposString  "((esta é uma string com parênteses delimitando ambos os lados)))"

puts "tolower converte isso: $maiusculo"
puts "            para isso: [string tolower $maiusculo]\n"
puts "toupper converte isso: $minusculo"
puts "            para isso: [string toupper $minusculo]\n"
puts "trimright converte isso: $caracteresAposString"
puts "              para isso: [string trimright $caracteresAposString .]\n"
puts "trimleft converte isso: $caracteresAntesString"
puts "             para isso: [string trimleft $caracteresAntesString .]\n"
puts "trim converte isso: $caracteresAntesEAposString"
puts "         para isso: [string trim $caracteresAntesEAposString "()"]\n"

set rotulos [format "%-20s %+10s " "Item" "Custo"]
set preco1 [format "%-20s %10d Centavos cada" "Tomates" "30"]
set preco2 [format "%-20s %10d Centavos cada" "Pimentas" "20"]
set preco3 [format "%-20s %10d Centavos cada" "Cebolas" "10"]
set preco4 [format "%-20s %10.2f o Kg" "Steak" "3.59997"]

puts "\n Exemplo de format:\n"
puts $rotulos
puts $preco1
puts $preco2
puts $preco3
puts $preco4
:TEXT_END:

