Muy buena la solucion, funciona perfecto.
En breve vuelvo con otro interrogante de la implementacion que tengo que hacer 
de esto en ROR.

Muchas gracias nuevamente.-
  ----- Original Message ----- 
  From: Alejandro Di Battista 
  To: Grupo Ruby Argentina 
  Sent: Tuesday, June 12, 2007 6:53 PM
  Subject: Re: [Ruby Arg] Consulta sobre chomp y split


  Se obviamos el control de errores hay una solucion elegante...


    1# Banco = Struct.new(:banco, :matricula, :latitud, :ems, :a0, :a1, :a2, 
:a3, :a4, :a5, :a6, :a7, :a8, :a9)
    2# bancos = File.open("c:/datos.txt").map{|linea| 
Banco.new(linea[0..30].strip, *linea[31..-1].split)}
    3# bancos.each{|x| puts x.banco, x.matricula}


  En la linea 1# crea una estructura para almacenar los datos... de manera que 
luego se pueda acceder x.banco o x.matricula, etc. (como vemos en la linea #3)

  En la linea 2# Abre el archivo, lo procesa linea por linea convirtiendola 
(via map) en un instancia de la clase Banco, asume que el primer campo tiene 
una logitud fija y los siguientes campos estan separados por un espacio en 
blanco (el "*" delante de linea expande el array resultante en una lista de 
parametros) 

  La linea 3# es solo para probar que todo funcionó !

  Ruby es maravilloso!!! y Rails es increiblemente bello!!!

  :)




  On 6/12/07, Leandro Marcucci <[EMAIL PROTECTED]> wrote:
    El 12/06/07, Fernando Castañeda <[EMAIL PROTECTED]> escribió:
    >
    >
    > Hola grupo :
    > Soy nuevo en ruby y aca va mi primer pregunta.
    > Tengo el sig. archivo de txt que se deben procesar dariamente con el sig. 
    > formato.
    > Ej : de un par de lineas que vienen:
    >
    > MAREJADA                       0001107 051215 4151.440S 06150.960W 224 
09.0
    > 0000 005 G 470115510 08466 029 701006062
    > CENTAURO 2000                  0000482 051215 4215.640S 06133.160W 096 
04.0
    > 0000 005 G 470111210 08466 067 701019000
    > ELSA LIBERTAD                  0001499 051215 4320.320S 06503.640W 327 
00.0
    > 0000 005 G 470181191 08473 213 000000000
    > QUE LE IMPORTA                 0001355 051215 4320.440S 06503.440W 343 
00.1
    > 0000 005 G 470181217 08473 227 701000705
    > ATREVIDO                       0000145 051215 4217.080S 06136.400W 080 
04.0
    > 0000 005 G 470111910 08466 014 701006040
    >
    > El problema me surge con la que es mi primer atributo de la clase, el 
nombre
    > del barco.
    > Con la instruccion  line.chomp.split(" ") separo por especios en blanco,
    > pero no me sirve para los buques cuyos  nombres a su vez están separados 
por 
    > espacios como "QUE LE IMPORTA" o "ELSA LIBERTAD" ya que pasan a ser otro
    > atributo en esos casos particulares.
    > Hay alguna manera de hacerlo con expresiones regulares.
    >  Muchas gracias por su ayuda. 
    > Ej. del codigo que implemento.
    >
    >
    > def procesar
    >
    > File.open("c:/vts/txt/d.txt") do |file|
    >
    > while line = file.gets
    >
    > barco, matricula, latitud,  longitud, ems,  rmsi, etc= line.chomp.split(" 
")
    >
    > # codigo que crea el objeto movimientobuque para cada linea procesada
    >
    > end
    >
    > end
    >
    > Saludos desde Mar del Plata
    >
    > Fernando Castañeda.- 
    >
    >
    > _______________________________________________
    > ruby mailing list
    > [email protected]
    > http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
    >
    >

    Llego un poco tarde al thread y veo (segun como me presenta gmail el
    extracto del archivo de texto que pusiste) que luego del nombre del 
    barco hay una tabulacion. Si no fuera asi, podes tomar los valores de
    atras para adelante, parseando cada linea dividiendola en los 6
    ultimos espacios y tomando cada parte como uno de tus datos, quedando
    el nombre del barco y todos sus espacios en el ultimo segmento. 

    Espero que sirva, salu2.
    _______________________________________________
    ruby mailing list
    [email protected]
    http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar




  -- 
  Agilsoft
  (381) 431-4290 | Maipú 140 Of. 30
  (4000) Tucumán | Argentina 


------------------------------------------------------------------------------


  _______________________________________________
  ruby mailing list
  [email protected]
  http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
_______________________________________________
ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar

Responder a