Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Strings de tamaño fijo

759 views
Skip to first unread message

Emilio Arellano

unread,
Apr 2, 2002, 11:36:53 AM4/2/02
to
Hola, a todos y gracias por adelantado. Ahí va mi problema:

Necesito escibir en un fichero de texto registros. Cada uno de estos
registros
es una String formada a su vez por varios "objetos" con la condicion de que
cada
uno de ellos debe aparecer en una posición concreta de la String.
Por ejemplo, los 3 primeros caracteres deben contener un int de 3 o
menos cifras (si es de menos se debe rellenar con ceros), los 40 siguientes
deben
ser el nombre de una persona (si no llegan a los 40 caracteres deben quedar
vacios, es decir, relleno de espacios y ademas alineados a la derecha), los
13 siguientes son un double,...
Un ejemplo:
"023_________________________EMILIO ARELLANO0000134000.91"

Lo que hago es crear un StringBuffer y utilizar el metodo append para ir
añadiendo cada parte de la String.

El problema de los int y los double lo he solucionado utilizando la
clase java.text.DecimalFormat, pero con las Strings no he encontrado
nada parecido. ¿Alguien me puede echar una mano?

--
------------------------------------------
| |
| Emilio José Arellano Cruz |
| |
------------------------------------------
| emilio_...@hotmail.com | ZARAGOZA |
| 434...@cepsz.unizar.es | |
| arel...@tb-solutions.com | (ESPAÑA) |
------------------------------------------


Chete

unread,
Apr 2, 2002, 12:00:46 PM4/2/02
to
Yo lo que hice una vez fue declarar una cadena del tipo " " en
tu caso "___________" e insertar en ella.
Te envío la clase que me hace el padding de los números.

package com.utils.jutil;
/**
* Título: recambios
* Descripcion:
* Copyright: Copyright (c) 2001
* Empresa: xxxxx
* @author xx.xx.x..x
* @version 1.0
*/

import java.math.BigDecimal;
public class Padder {

/**
* Vacío
*/
public Padder() {

}

/**
* Recibe un entero, Numero, a convertir y otro con el tamaño de la
cadena que queremos
* <br>Devuelve ceros a la izquierda
*/

public String padIntL(int Numero, int Size){
String result="";
String Num;
try{
Num = Integer.toString(Numero);
for(int i=0;i<Size -Num.length();i++)
result = result +"0";
result = result + Num;
}
catch (Exception E){
E.printStackTrace();
};

return result;
}

/**
* Recibe un int (Numero) a convertir y otro con el tamaño de la cadena
que queremos (Size)
* <br>Devuelve ceros a la izquierda
*/

public String padIntL(String Numero, int Size){
String result="";

try{
for(int i=0;i<Size - Numero.length() ;i++)
result = result + "0";
result = result + Numero;
}
catch (Exception E){
E.printStackTrace();
};

return result;
}

/**
* Recibe una cadena, Frase, y devuelve otra con tamaño Size y espacios
a la izquierda
*/

public String padStringL(String Frase, int Size){
String result = "";
for(int i=0;i<Size -Frase.length();i++)
result = result +" ";
result = result + Frase;
return result;
}

/**
* Recibe una cadena, Frase, y devuelve otra con tamaño Size y espacios
a la derecha
*/

public String padStringR(String Frase, int Size){
/**
* @see String
*/
String result="";
//
// for (int i=0; i<Size-1; i++)
// temp = temp + " ";
// StringBuffer result = new StringBuffer(temp);
// result.replace(0,Frase.length()-1,Frase);
if (Frase.length()>Size)
result = Frase.substring(0,Size);
else{
for (int i=0; i < Size - Frase.length(); i++)
result = result + " ";
result = result + Frase;
}
return result.toString();
}

/**
* Recibe un Numero, el tamaño deseado de la cadena que devuelve y los
decimales que queremos
*/
public String padFloat(float Numero, int Size, int precision){

String result="";
String Tmp1 ="";
String Tmp2="";
int decimales=0;
boolean decimal=false;
try{
BigDecimal num = new BigDecimal(""+Numero).setScale(precision);
Tmp1 = "" + num.floatValue();

//cojemos parte entera y decimal sin la coma
for(int i=0; i<Tmp1.length();i++){
if (Tmp1.substring(i,i+1).equalsIgnoreCase(".")){
decimal = true;
continue;
}
if (decimal)
++decimales;
Tmp2 = Tmp2 + Tmp1.substring(i,i+1);

// System.out.println("Antes :"+Numero);
// System.out.println("Cadena "+Tmp2);
}
//añadimos ceros a la derecha de los decimales que nos pide precisión
if (decimales < precision){
for (int i=0;i<precision - decimales; i++)
//añadimos ceros a la derecha
Tmp2 = Tmp2 + "0";
}
//rellenamos ceros a la izquierda
for(int i=0;i<Size - Tmp2.length() ;i++)
result = result + "0";

result = result + Tmp2;
// System.out.println("Result "+Tmp2);

}
catch (Exception E){
E.printStackTrace();
}
finally{
return result;
}
}
/**
/* Se le pasa una cadena (sólo con números) y un entero indicando el
número de decimales que contiene
/* Devuelve un float
*/
public float padFloatfromString(String Numero,int Precision){
float result =0;
BigDecimal num = null;
String nuevo ="";
String entero= Numero.substring(0, Numero.length() - Precision);
String decimal=Numero.substring(Numero.length() - Precision,
Numero.length());
nuevo = entero +"."+ decimal;
try{
num = new BigDecimal(nuevo);
}
catch (Exception E){
E.printStackTrace();
}
finally{
return num.floatValue();
}
}

/**
/* Se le pasa una cadena numérica con ceros a la izquierda.
/* Devuelve la misma pero sin los ceros.
*/
public String quitaCeros(String Numero){
String result = "";
int primero = 0;
for (primero = 0; primero < Numero.length(); primero++){
if (!Numero.substring(primero,primero + 1).equalsIgnoreCase("0"))
break;
}

result = Numero.substring (primero, Numero.length());
return result;
}
}


Emilio Arellano

unread,
Apr 3, 2002, 2:20:55 AM4/3/02
to
Gracias.

Yo pensaba que habria alguna clase como java.text.DecimalFormat para String
dentro del API de SUN y que no encontraba.
Por eso pregunté. De todas formas te agradezco que me mandes el código. Me
ha servido de mucho.

"Chete" <av...@telepolis.com> wrote in message
news:a8co4p$r31e2$1...@ID-126020.news.dfncis.de...

FGR

unread,
Apr 16, 2002, 12:40:37 PM4/16/02
to
Hola a todos

Ahora que veo la clase BigDecimal, he de decir que esta clase no me funciono
correctamente con el jdk1.2.2 sobre una maquina unix con solaris

Chete escribió en mensaje ...

Chete

unread,
Apr 16, 2002, 12:46:20 PM4/16/02
to
No se que decirte, una posibilidad de error de este tipo es que se compile
con un jdk y se ejecute con otra version.
"FGR" <gal...@mail.com> escribió en el mensaje
news:a9hk3a$s4c$1...@nsnmrro2-gest.nuria.telefonica-data.net...
0 new messages