| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/09/2008 21:13:09
|
mscastello
Smalltalk
Membro desde: 16/09/2008 21:00:28
Mensagens: 2
Offline
|
Boa Noite.
tenho uma arquivo texto que preciso alinhar:
arquivo.txt
nome apelido cpf idade valor
maria mariazinha 111111 20 15000,00
sebastiana bastiana 626262 9 100,00
tem alguma forma de formatar as colunas para que todas elas comecem da direita, independente do tamanho, pois qdo peço pra montar o arquivo não sei o tamanho de cada coluna.
BufferedWriter texto = new BufferedWriter(arquivo);
texto.write(" " + nome + " " + apelido + " " + cpf + " " + idade + " " + valor + " ");
texto.newline();
...
porém assim esta hard-code.
caso alguem possa me ajudar, agradeço.
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/09/2008 09:13:48
|
von.juliano
GUJ Master
![[Avatar]](/images/avatar/efb61dd984183066a8815190a28bd956.jpg)
Membro desde: 15/01/2007 13:31:32
Mensagens: 1266
Offline
|
mscastello wrote:tem alguma forma de formatar as colunas para que todas elas comecem da direita, independente do tamanho, pois qdo peço pra montar o arquivo não sei o tamanho de cada coluna.
Como assim, "comecem da direita"?
Flw!
|
É difícil manter-se religioso quando algumas pessoas simplesmente não são carbonizadas por raios!
Desenvolvendo software de forma simples! - http://vonjuliano.wordpress.com/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/09/2008 09:18:40
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
Use printf ou String.format. Veja a documentação dos formatos em:
http://java.sun.com/j2se/1.5.0/docs/api/java/util/Formatter.html
Exemplo:
Estou supondo que nome, apelido e cpf são strings, idade seja um int, e valor seja um double ou float.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/09/2008 09:30:30
|
von.juliano
GUJ Master
![[Avatar]](/images/avatar/efb61dd984183066a8815190a28bd956.jpg)
Membro desde: 15/01/2007 13:31:32
Mensagens: 1266
Offline
|
Thingol, pode me explicar o que a String "%-40.40s %-40.40s %-15.15s %3d %10.2f" faz?
Vlw!
|
É difícil manter-se religioso quando algumas pessoas simplesmente não são carbonizadas por raios!
Desenvolvendo software de forma simples! - http://vonjuliano.wordpress.com/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/09/2008 09:57:16
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
Tá bom, você que não quer ler a documentação (e não está acostumado com a linguagem C) vai ver a explicação completa.
%-40.40s - %s = imprime string ou qualquer Object que implemente toString(), "-" = alinhado à esquerda, 40 = 40 posições reservadas, .40 (para strings) = no máximo 40 posições, depois disso passa a truncar
%-40.40s - %s = imprime string ou qualquer Object que implemente toString(), "-" = alinhado à esquerda, 40 = 40 posições reservadas, .40 (para strings) = no máximo 40 posições, depois disso passa a truncar
%-15.15s - %s = imprime string ou qualquer Object que implemente toString(), "-" = alinhado à esquerda, 15 = 15 posições reservadas, .15 (para strings) = no máximo 15 posições, depois disso passa a truncar
%3d - %d = imprime int ou long (alinhado à direita), 3 = 3 posições (afinal de contas, ninguém chegou aos 999 anos, exceto Matusalém)
%10.2f - %f = imprime float ou double (alinhado à direita), 10 = 10 posições reservadas, .2 = 2 casas depois da vírgula.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/09/2008 10:08:00
|
von.juliano
GUJ Master
![[Avatar]](/images/avatar/efb61dd984183066a8815190a28bd956.jpg)
Membro desde: 15/01/2007 13:31:32
Mensagens: 1266
Offline
|
Os %s, %d e %f eu já conhecia, mas com números no meio, como %-40.40s, já fugiram dos meus conhecimentos!
Obrigado!
|
É difícil manter-se religioso quando algumas pessoas simplesmente não são carbonizadas por raios!
Desenvolvendo software de forma simples! - http://vonjuliano.wordpress.com/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/09/2008 10:22:23
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
Na verdade printf (ou String.format) seriam meio inúteis se não fosse possível especificar o número de casas ou posições.
Quem conhece direitinho a história das linguagens vai ver que esses formatos esquisitos do C (e que foram copiados pelo Java) são na verdade inspirados no FORMAT do Fortran ( http://www.fortran.com/F77_std/rjcnf-13.html#sh-13 ), embora sejam um pouco mais simples . Por exemplo, D13.3 no Fortran é %13.3d no C e no Java.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/09/2008 10:17:45
|
mscastello
Smalltalk
Membro desde: 16/09/2008 21:00:28
Mensagens: 2
Offline
|
Pessoal,
Obrigado pelas dicas,
mas realmente o que eu queria era saber se tinha alguma classe pronta que fazia isso, procurei na api e não encontrei.
então, falando com um amigo criamos uma para resolver esse caso.
public class AlinharColuna {
public static String alinhaDireita(String base, char comp, int tam) {
return base + geraComplemento(base, comp, tam);
}
public static String alinhaEsquerda(String base, char comp, int tam) {
return geraComplemento(base, comp, tam) + base;
}
private static String geraComplemento(String base, char comp, int tam) {
String resultado = "";
if ((base == null) || (base.length() >= tam)) {
return resultado;
}
int tamanhoCompl = tam - base.length();
for (int i=0; i < tamanhoComp; i++) {
resultado = resultado + comp;
}
return resultado;
}
}
obs: a classe geraComplemento é privada, pq a intenção é somente ser usada como complemento.
dessa forma, falta apenas chamar os metodos ao ser criado o arquivo.
tks.
|
|
|
 |
|
|