Antes que nada: Hola!!!
Hace menos de un mes que me subscribí a la lista y me gusta mucho Ruby y
Ruby on Rails.
Tuve un par de clases en la facultad sobre Ruby y me gusto mucho el lenguaje
desde el principio (vengo de Java).
Viendo los códigos de Fernando y Emmanuel encontré cosas que no conozco o no
comprendo. Precisamente lo siguiente:

  - registros << Estructura.*new*(linea[*0*..*30*].strip, *linea[*31*..-
  *1*].split) if linea.size == 106
  En la mayoría de los lenguajes el << se utiliza para "shifteo". ¿en
  Ruby también?¿Cómo funciona?
  ¿Para que sirve el * antes del arreglo?

Muchas gracias de antemano por su respuesta y disculpen por el off-topic.
Saludos,
Juan.


On 6/14/07, Emmanuel Oga <[EMAIL PROTECTED]> wrote:

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! <http://ar.answers.yahoo.com>*


_______________________________________________
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