No lo he probado, pero investiga algo como esto:

registros= []
  
  IO.foreach("nombre_archivo.txt") do |line|   #Lee cada linea del archivo
      registros << Estructura.new(linea[0..30].strip,  *linea[31..-1].split)   
if linea.size == 106
  end

Los llamados "one liners" estan ok, pero no te olvides de que existen los 
"procedimientos" (en el caso de ruby son métodos pertenecientes a un objeto 
global generado con la clase "Object"). Creo que estructurandolo asi es mas 
facil de entender lo que queres hacer:

registros= []
 def procesar(linea)
    # ... hace lo que quieras con la linea, ej:
    registros << Estructura.new(linea[0..30].strip,  *linea[31..-1].split)  
 end
 
 IO.foreach("nombre_archivo.txt") do |line|   #Lee cada linea del archivo
     procesar(linea) if linea.size == 106
 end

Emmanuel

Fernando Castañeda <[EMAIL PROTECTED]> escribió:       Una consulta de como 
implementar que la  linea que voy evaluando al abrir el archivo tenga una 
longitud de 106 caracteres  o en su defecto que se salteé en el procesamiento 
las 3 primeras lineas del  archivo ya que las mismas corresponden a encabezados 
que no son tenidos en  cuenta.
 No me funciona este bloque, ya que pasa y me  da error al mapear con el Struct 
cuando no tiene el contenido que  espera.       Registros = 
File.open('c:/vts/txt/dos.txt').map {|linea|  if linea.length  >= 106 then  
Estructura.new(linea[0..30].strip,  *linea[31..-1].split)  end}

  
 Muchas gracias nuevamente.
  
 Fernando Castañeda.
 www.inidep.edu.ar
  
 Codigo que vengo testeando 
  
 class  Movimiento
     attr_writer :nombre , :matricula 
     attr_reader :nombre , :matricula
      def initialize(nombre, matricula)
          @nombre = nombre
          @matricula =  matricula
     end
 end 
  
 miarray=Array.new
 Estructura = Struct.new(:barco, :matricula, :latitud, :ems, :a0, :a1, :a2, 
:a3, :a4, :a5, :a6, :a7, :a8, :a9)
 #Registros = File.open('c:/vts/txt/d.txt').map {|linea| puts  linea.size}
 Registros = File.open('c:/vts/txt/dos.txt').map {|linea| if linea.length = 106 
then Estructura.new(linea[0..30].strip, *linea[31..-1].split) end}
 Registros.each{|x| miarray <<  Movimiento.new(x.barco, x.matricula) }
 miarray.each{|y| puts y.matricula+" "+y.nombre}
 miarray.map {|item| puts item.matricula+"  "+item.nombre }
  
  
_______________________________________________
ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar


       
---------------------------------
 Preguntá. Respondé. Descubrí.
 Todo lo que querías saber, y lo que ni imaginabas,
está en Yahoo! Respuestas (Beta).
 ¡Probalo ya! 
_______________________________________________
ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar

Responder a