Alinhar arquivo texto.  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
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.

von.juliano
GUJ Master
[Avatar]

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/
[Email] [WWW]
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.

[WWW]
von.juliano
GUJ Master
[Avatar]

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/
[Email] [WWW]
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.
[WWW]
von.juliano
GUJ Master
[Avatar]

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/
[Email] [WWW]
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.
[WWW]
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.
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team