Resultados 1 al 5 de 5

Entrada estandar en Java

Vista híbrida

Mensaje anterior Mensaje anterior   Próximo mensaje Próximo mensaje
  1. #1 Entrada estandar en Java 
    Moderador HH
    Fecha de ingreso
    Mar 2003
    Ubicación
    Galiza
    Mensajes
    3.919
    Descargas
    8
    Uploads
    1
    Hola:

    tengo un problema que llevo un par de días intentando resolverlo y no lo doy echo.

    Tengo echa una aplicación echa en Java que con los datos almacenados en una base de datos genera un mapa y funciona desde hace meses... el problema es que ahora me encargaron que modifique la aplicación para que además de generar el mapa conectandose a una BD, pues también genere el mapa pasandole el nombre de un fichero o recibiendo los datos por STDIN...

    El motivo por qué quieren eso es muy simple, tienen una aplicación que actua como servidora y recibe datos de varias sucursales y saca los datos recibidos por salida estandar (normalmente rederigida a un fichero). Cada cierto tiempo cogían ese fichero e introducian los datos en una base de datos, para que la aplicación que yo hice generase un mapa de situación... Ahora quieren evitarse ese paso y poder hacer algo asi:

    java situamap [-{a,b,g}] < atena2 <ENTER>
    NOTA: situamap es mi aplicación Y atena2 es la aplicación que genera los datos.

    Bien a lo que iba, tengo poca experiencia en Java, pero leer un fichero no me causa un problema, pero trabajar con la entrada estandar si me lo está causando... Motivo: no se cuantas lineas generara la aplicación...

    atena2 genera una salida similar a esto:
    #25-01-08
    14
    13 5 756 21
    13 6
    5 2 25 2
    12
    14 6 51 21
    #26-01-08
    14 6 56 1
    13 6 21
    5
    #27-01-08
    ...

    las "#" para mi son comentarios y las tengo que ignorar
    las otras lineas son las que tengo que procesar, que pienso aprovecharme el StringTokenizer para hacerlo, porque a priori no se sabe cuantos elementos habrá ya que dependiendo de la cantidad de números se hace una cosa u otra, por ejemplo, cuando hay un número solo significa "limpiar municipio [número]", cuando hay cuatro significa "municipio, polígono, parcela, accion"... Este no es el problema.

    El problema es que no se cuantas líneas me va a generar y no doy con la respuesta de lo que tengo que hacer y llevo intentando cosas desde hace un par de días y no logro dar con la solución... solo necesito encontrar una forma de leer es esquema de como leer una cantidad arbitraria de lineas a través de STDIN...

    Agradezco cualquier aportación

    Un Saludo
    He conocido muchos dioses. Quien niegue su existencia está tan ciego como el que confía en ellos con una fe desmesurada. Robert E. Howard
    La suerte ayuda a la mente preparada.
    Citar  
     

  2. #2  
    Moderador Global Avatar de hystd
    Fecha de ingreso
    Jul 2005
    Ubicación
    1, 11, 21, 1211...
    Mensajes
    1.596
    Descargas
    58
    Uploads
    0
    Buenas! En java la entrada y salida estandar (descriptores 0 y 1) las puedes manejar desde la clase System. De forma que System.in hace referencia a stdin, System.out hace referencia a stdout, y System.err a stderr.

    Si lo he entendido bien, la modificación que quieres hacer sería redirigir la entrada estandar de tu aplicación para que lea los datos generados por antena2... sólo con poner un bucle en tu aplicación que lea datos de la entrada estandar hasta finalizar... algo así como:

    char c;
    while (c = System.in.read() != '\n') {
    //procesar c
    //contador de caracteres
    }

    Este por ejemplo simularía el comando cat de linux.

    Un saludo
    Citar  
     

  3. #3  
    Moderador HH
    Fecha de ingreso
    Mar 2003
    Ubicación
    Galiza
    Mensajes
    3.919
    Descargas
    8
    Uploads
    1
    Muchas gracias por la respuesta hystd, pero no me entendiste, mi problema es parecido, ciertamente también tengo una cantidad de caracteres arbitrario por línea, pero de una forma análoga a la tuya y con StringTokenizer no tengo demasiados problemas...

    El gran problema es que hay muchas lineas, no una sola y ahi es el problema, no se sabe cuantas líneas generará atena2, solo se que será que es de está forma la salida:
    #fecha //estás lineas las desecho
    4 2 1 4\n
    5\n
    6 8 9\n
    #otra fecha
    9 12 5 3 4\n
    ...
    Lo que tiene que hacer mi programa es coger lineas completas y procesarlas una detras de otra, lo que no se es cuantas habrá, atena2 como mínimo te envia una con la fecha, pero el problema es que habrá días que reciba 2 o 3 líneas y otros puede recibir a lo mejor 400 líneas (normalmente en torno a 50 líneas)...

    Y ese es mi problema, no consigo dar con un código que me permita leer una cantidad no determinada de líneas por entrada estandar...

    Un Saludo
    He conocido muchos dioses. Quien niegue su existencia está tan ciego como el que confía en ellos con una fe desmesurada. Robert E. Howard
    La suerte ayuda a la mente preparada.
    Citar  
     

  4. #4  
    Moderador Global Avatar de hystd
    Fecha de ingreso
    Jul 2005
    Ubicación
    1, 11, 21, 1211...
    Mensajes
    1.596
    Descargas
    58
    Uploads
    0
    Vale, entonces se me ocurre una posible forma... sabemos que System.in.read() devuelve un entero, puesto que está definido así en la interfaz, de hecho lo correcto es hacer un casting a char, (char)System.in.read(); y también sabemos que si no recibe caracteres de la entrada estandar, devuelve -1... entonces simplemente haciendo algo del tipo:

    while (n=System.in.read()!=-1){
    c=(char)n;
    //procesar c
    }

    Pruébalo y me cuentas.

    Un saludo
    Citar  
     

  5. #5  
    Moderador HH
    Fecha de ingreso
    Mar 2003
    Ubicación
    Galiza
    Mensajes
    3.919
    Descargas
    8
    Uploads
    1
    Pues voy a provar, es muy posible que funcione...

    Muchas gracias por la ayuda hystd... a lo mejor te hago más preguntas, porque yo y Java no nos llevamos bien, pero últimamente me estoy teniendo que poner y me estoy topando con muchos escollos, estoy demasiado acostumbrado a otros lenguajes...

    Un Saludo
    He conocido muchos dioses. Quien niegue su existencia está tan ciego como el que confía en ellos con una fe desmesurada. Robert E. Howard
    La suerte ayuda a la mente preparada.
    Citar  
     

Temas similares

  1. desviación estándar en java
    Por popeosorio en el foro GENERAL
    Respuestas: 3
    Último mensaje: 19-06-2010, 23:06
  2. Daña la entrada de microfono
    Por vladivx en el foro HARDWARE
    Respuestas: 5
    Último mensaje: 01-12-2007, 02:47
  3. Entrada de antena a PC
    Por d2dkdt en el foro TV CABLE
    Respuestas: 1
    Último mensaje: 11-07-2006, 11:17
  4. Punto de ENTRADA
    Por SanLeviaThan en el foro GENERAL
    Respuestas: 0
    Último mensaje: 05-04-2006, 00:59
  5. Me han vetado la entrada.....
    Por SARCUS en el foro GENERAL
    Respuestas: 3
    Último mensaje: 31-10-2002, 18:09

Marcadores

Marcadores