Buscar
Social
Ofertas laborales ES

Foro sobre Java EE > Ayuda con un dato long

Hola a todos , creo que me estoy enredando sola pero la verdad no manejo java y ya llevo dos días la verdad intentando pero sigo con problemas con un programa ya hecho, el programa lo que hace es que valida un archivo txt y lo carga a la base de datos .

En la validación hay un registro que actualmente es de tamaño 26 caracteres pero se debe cambiar a 28 (ya lo hice) , este registro esta divido en varias partes uno de ellas esta del campo 6 al 16 y el otro va del campo 16 al 26, ya lo modifique y quedaron del campo 6 al 18 y el otro del campo 18 al 28 hasta aqui no hay problem , pero resulta que el programa debe cargar los archivos que vengan con el registro de tamaño 26 como los de tamaño 28 y ahora me carga los de 28 pero cuando va a cargar uno de tamaño 26 el sistema se sale y genera error .

Agradezco me orienten en que función puedo utilizar o que debo hacer para que me acepte los archivos con los dos tamaños , envio el código para que sea mas claro el tema :

//Inicialmente Validar que los renglones tengan la longitud indicada:

if(renglon31.length() < 28 ){
throw new Exception("Registro Tipo 31;1;El renglon 31 tiene mas caracteres de lo necesario. Tamano = "+renglon31.length()+" - Requerido 28 ;"+sec);
}

//Extraer los datos del renglon 31

try{
baseCotizacion = Long.parseLong(renglon31.substring(6,18).trim());
if(baseCotizacion < 0){
throw new Exception("\"Registro Tipo 31;3;La sumatoria de los ingresos base de cotizacion no puede ser inferior a 0. Valor especificado '"+renglon31.substring(6, 18).trim()+"';"+sec);
}
}
catch(NumberFormatException ne){
throw new Exception("Registro Tipo 31;3;La sumatoria de los ingresos base de cotizacion debe ser del tipo numerico.Valor especificado '"+renglon31.substring(6, 18).trim()+"';"+sec);
}

//Extraemos el valor total de cotizacion obligatoria
try{
cotizacionObligatoria = Long.parseLong(renglon31.substring(18,28).trim());
if(cotizacionObligatoria <=0){
throw new Exception("Registro Tipo 31;4;La sumatoria de las cotizaciones obligatorias no puede ser inferior a 0;"+sec);
}
}
catch(NumberFormatException ne){
throw new Exception("Registro Tipo 31;4;La sumatoria de las cotizaciones obligatorias debe ser del tipo numerico. Valor especificado '"+renglon31.substring(18, 28).trim()+"';"+sec);
}

Muchas gracias por la colaboración que me puedan brindar .

agosto 13, 2013 | Registered Commenteranaherrera

Tal y como lo tienes, en vez de comprobar solamente si es menor de 28, creo que debes obtener la longitud de ese "renglon31", y en cada caso, sea de 26 o de 28, cambiar la lógica apropiadamente.

En concreto, esta línea:
cotizacionObligatoria = Long.parseLong(renglon31.substring(18,28).trim());

agosto 13, 2013 | Registered Commenterchoces

muchas gracias por tu respuesta ya lo hice de la siguiente manera pero me sigue generando error:

// valido la longitud del registro

if(renglon31.length() != 26 && renglon31.length() != 28){
throw new Exception("Registro Tipo 31;1;El renglon 31 tiene mas caracteres de lo necesario. Tamano = "+renglon31.length()+" - Requerido 28 o 26;"+sec);
}


//extraer el valor del primer campo

try{
if(renglon31.length() == 26 ){
baseCotizacion = Long.parseLong(renglon31.substring(6,16).trim());
if(baseCotizacion < 0){
}else{
baseCotizacion = Long.parseLong(renglon31.substring(6,18).trim());
}
if(baseCotizacion < 0){
}
throw new Exception("\"Registro Tipo 31;3;La sumatoria de los ingresos base de cotizacion no puede ser inferior a 0. Valor especificado '"+renglon31.substring(6, 18).trim()+"';"+sec);
}
}

catch(NumberFormatException ne){
throw new Exception("Registro Tipo 31;3;La sumatoria de los ingresos base de cotizacion debe ser del tipo numerico. Valor especificado '"+renglon31.substring(6, 18).trim()+"';"+sec);
}


//Extraer valor del segundo registro
try {
if(renglon31.length() == 26 ){
cotizacionObligatoria = Long.parseLong(renglon31.substring(16,26).trim());
if(cotizacionObligatoria <=0){
}else{
cotizacionObligatoria = Long.parseLong(renglon31.substring(18,28).trim());
}
if(cotizacionObligatoria <=0){

throw new Exception("Registro Tipo 31;4;La sumatoria de las cotizaciones obligatorias no puede ser inferior a 0;"+sec);
}
}
}
catch(NumberFormatException ne){
throw new Exception("Registro Tipo 31;4;La sumatoria de las cotizaciones obligatorias debe ser del tipo numerico. Valor especificado '"+renglon31.substring(18, 28).trim()+"';"+sec);
}

Gracias por tu orientación

agosto 13, 2013 | Unregistered Commenteranaherrera

¿Cuál es ese error y qué línea lo lanza?
Haces un substring con el último índice igual al tamaño. ¿No será un out of bounds?

agosto 13, 2013 | Registered Commenterchoces

Yo diría que buscas algo así:


int longitudRegistro = renglon31.length();
String campo1;
String campo2;

switch (longitudRegistro) {
case 26:
campo1 = renglon31.substring(6,16).trim();
campo2 = renglon32.substring(16).trim(); // Deberá llegar hasta el final del campo, ¿no?
break;
case 28:
campo1 = renglon31.substring(6,18).trim();
campo2 = renglon32.substring(18).trim(); // Deberá llegar hasta el final del campo, ¿no?
break;
default:
throw new Exception("Registro Tipo 31;1;El renglón 31 tiene una longitud inadecuada. Tamaño = "+renglon31.length()+" - Requerido 26 o 28;");
}

// Extraer el valor del primer campo
try{
baseCotizacion = Long.parseLong(campo1);
if (baseCotizacion < 0) {
throw new Exception("Registro Tipo 31;3;La sumatoria de los ingresos base de cotización no puede ser inferior a 0. Valor especificado " + campo1 + ";" + sec);
}
} catch(NumberFormatException ne) {
throw new Exception("Registro Tipo 31;3;La sumatoria de los ingresos base de cotizacion debe ser del tipo numerico. Valor especificado " + campo1 + ";" + sec);
}

// Extraer valor del segundo registro
try {
cotizacionObligatoria = Long.parseLong(campo2);
if (cotizacionObligatoria <= 0) {
throw new Exception("Registro Tipo 31;4;La sumatoria de las cotizaciones obligatorias no puede ser inferior a 0;" + sec);
}
} catch(NumberFormatException ne) {
throw new Exception("Registro Tipo 31;4;La sumatoria de las cotizaciones obligatorias debe ser del tipo numerico. Valor especificado " + campo2 + ";" + sec);
}

agosto 14, 2013 | Registered Commenterrickiees