elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Error al leer double de fichero [HELP]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Error al leer double de fichero [HELP]  (Leído 3,129 veces)
JonaLamper


Desconectado Desconectado

Mensajes: 394



Ver Perfil
Error al leer double de fichero [HELP]
« en: 21 Enero 2019, 19:56 pm »

Buenas tardes!

A ver... tengo un código muy fácil que no sé por qué demonios no funciona  :xD Estoy tratando de leer un double desde fichero así:

Código
  1. @Override
  2. public double readDouble(Scanner in) {
  3. return in.nextDouble();
  4. }
  5.  
  6. double element = readDouble(in);

Y en el fichero tengo el siguiente número escrito: 48.46372902270499. Si asigno ese número directamente a la variable element, entonces sí lo procesa, o sea que debe haber algún tipo de fallo en la lectura, pero no sé cuál  :-\  El Scanner in está simplemente declarado así:

Código
  1. Scanner in;

Somebody help me :(

P.D: la excepción lanzada es InputMismatchException, pero la he buscado y simplemente dice que no coincide el "token" leído con el esperado.


« Última modificación: 21 Enero 2019, 19:59 pm por JonaLamper » En línea

Utilizar palabras para hablar de palabras es como utilizar un lápiz para hacer un dibujo de ese lápiz sobre el mismo lápiz.
rub'n


Desconectado Desconectado

Mensajes: 1.217


(e -> λ("live now")); tatuar -> λ("α");


Ver Perfil WWW
Re: Error al leer double de fichero [HELP]
« Respuesta #1 en: 21 Enero 2019, 20:19 pm »

Buenas tardes!

A ver... tengo un código muy fácil que no sé por qué demonios no funciona  :xD Estoy tratando de leer un double desde fichero así:

Código
  1. @Override
  2. public double readDouble(Scanner in) {
  3. return in.nextDouble();
  4. }
  5.  
  6. double element = readDouble(in);

Y en el fichero tengo el siguiente número escrito: 48.46372902270499. Si asigno ese número directamente a la variable element, entonces sí lo procesa, o sea que debe haber algún tipo de fallo en la lectura, pero no sé cuál  :-\  El Scanner in está simplemente declarado así:

Código
  1. Scanner in;

Somebody help me :(

P.D: la excepción lanzada es InputMismatchException, pero la he buscado y simplemente dice que no coincide el "token" leído con el esperado.

wtf pon mas source dog, pare ver que pasa.


En línea

rubn0x52.com KNOWLEDGE  SHOULD BE FREE.
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen king
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.866



Ver Perfil
Re: Error al leer double de fichero [HELP]
« Respuesta #2 en: 21 Enero 2019, 21:50 pm »

Aparenta ser un simple problema de caracter delimitador...


Saludos
En línea



JonaLamper


Desconectado Desconectado

Mensajes: 394



Ver Perfil
Re: Error al leer double de fichero [HELP]
« Respuesta #3 en: 21 Enero 2019, 23:43 pm »

Código
  1. public double readDouble(Scanner in) {
  2. return in.nextDouble();
  3. }
  4.  
  5. in.useDelimiter("\n")
  6. double elem = readDouble(in);;

Estoy usando el delimitador "\n" y he puesto los datos en forma de columna en el .txt. Aún así, continúa dando el mismo error  :(
En línea

Utilizar palabras para hablar de palabras es como utilizar un lápiz para hacer un dibujo de ese lápiz sobre el mismo lápiz.
JonaLamper


Desconectado Desconectado

Mensajes: 394



Ver Perfil
Re: Error al leer double de fichero [HELP]
« Respuesta #4 en: 21 Enero 2019, 23:49 pm »

Mi fichero tiene estos datos:

48.46372902270499,72.28360046911516
65.52885493079854,22.676786207855894

Incluso usando el código del ejemplo no funciona:

Código
  1. in.useDelimiter(",|\n");
  2. double elem = in.nextDouble();
  3. System.out.println(elem);


Incluso en ejemplo de páginas "fiables" no funciona. Por ejemplo: http://www.java2s.com/Code/Java/Development-Class/UseScannertoreadvarioustypesofdatafromafile.htm

He copiado el código de esa página en un proyecto y cuando va a leer el número 12.2, se supone que debe entrar en el if del src.hasNextDouble, pero no, lo lee como si fuese un String. Menuda broma...

ACTUALIZO: haciendo esto funciona, pero no es muy elegante...

Código
  1. in.useDelimiter(" ");
  2. String elem = in.next();
  3. double doubleElem = Double.parseDouble(elem);
  4. System.out.println(doubleElem);



« Última modificación: 22 Enero 2019, 00:33 am por JonaLamper » En línea

Utilizar palabras para hablar de palabras es como utilizar un lápiz para hacer un dibujo de ese lápiz sobre el mismo lápiz.
WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.605


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: Error al leer double de fichero [HELP]
« Respuesta #5 en: 22 Enero 2019, 00:43 am »

Te recomiendo que proceces linea por linea y parsees la data con expresión regular, es aprueba de errores, si la expresión falla es porque la linea tiene un formato incorrecto.

Código:
/(.+?),([\d\.]+)/
En línea

EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.156



Ver Perfil
Re: Error al leer double de fichero [HELP]
« Respuesta #6 en: 22 Enero 2019, 05:41 am »


Incluso en ejemplo de páginas "fiables" no funciona. Por ejemplo: http://www.java2s.com/Code/Java/Development-Class/UseScannertoreadvarioustypesofdatafromafile.htm

He copiado el código de esa página en un proyecto y cuando va a leer el número 12.2, se supone que debe entrar en el if del src.hasNextDouble, pero no, lo lee como si fuese un String. Menuda broma...

- Sucede que la Localización da formato a los números decimales y moneda, por ejemplo en EEUU la coma ( , ) no tiene nada que ver con números decimales (Double), pero el punto ( . ) si. Doy por sentado de que tu Sistema Operativo tiene configurada una localización NO EEUU, por lo que tu Sistema interpreta la coma ( , ) como separador decimal, y no tiene ni idea de lo que hace un punto ( . ) entre dos números enteros :xD.

-- Si utilizas decimales con punto ( . ) debes especificar una Localización US (United States), Revisa la línea 5 y 22 que he agregado:

Código
  1. import java.io.FileReader;
  2. import java.io.FileWriter;
  3. import java.io.IOException;
  4. import java.util.Scanner;
  5. import java.util.Locale;
  6.  
  7. public class MainClass {
  8.  public static void main(String args[]) throws IOException {
  9.  
  10.    int i;
  11.    double d;
  12.    boolean b;
  13.    String str;
  14.  
  15.    FileWriter fout = new FileWriter("test.txt");
  16.    fout.write("Testing Scanner 10 12.2 one true two false");
  17.    fout.close();
  18.  
  19.    FileReader fin = new FileReader("Test.txt");
  20.  
  21.    Scanner src = new Scanner(fin);
  22.    src.useLocale(Locale.US);
  23.  
  24.    while (src.hasNext()) {
  25.      if (src.hasNextInt()) {
  26.        i = src.nextInt();
  27.        System.out.println("int: " + i);
  28.      } else if (src.hasNextDouble()) {
  29.        d = src.nextDouble();
  30.        System.out.println("double: " + d);
  31.      } else if (src.hasNextBoolean()) {
  32.        b = src.nextBoolean();
  33.        System.out.println("boolean: " + b);
  34.      } else {
  35.        str = src.next();
  36.        System.out.println("String: " + str);
  37.      }
  38.    }
  39.  
  40.    fin.close();
  41.  }
  42. }
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Error al leer un fichero de texto en Python « 1 2 »
Scripting
CaronteGold 17 12,758 Último mensaje 20 Diciembre 2010, 20:26 pm
por CaronteGold
Leer fichero csv
Programación C/C++
gonzalo_C 0 4,474 Último mensaje 20 Febrero 2012, 17:32 pm
por gonzalo_C
leer fichero .txt « 1 2 »
Programación C/C++
raquelsg88 15 6,651 Último mensaje 3 Junio 2013, 21:50 pm
por leosansan
Double C# y Double SQLITE (Separadores con Punto y Coma)
.NET (C#, VB.NET, ASP)
MauroMasciar 3 5,032 Último mensaje 10 Diciembre 2017, 17:20 pm
por Maurice_Lupin
Map: grabar en fichero // Map: leer desde fichero.
Programación C/C++
gastongaston 0 1,766 Último mensaje 30 Septiembre 2018, 16:03 pm
por gastongaston
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines