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