Ok, voy a probar y luego comento.
Muchas gracias
  ----- Original Message ----- 
  From: Emmanuel Oga 
  To: Grupo Ruby Argentina 
  Sent: Thursday, June 14, 2007 10:05 AM
  Subject: Re: [Ruby Arg] Consulta sobre block y su secuencia de evaluacion


  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
_______________________________________________
ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar

Responder a