por lo que veo, las columnas son de tamaño fijo... eso te puede ayudar para
parsearlo. La alternativa obviamente son las expresiones regulares.
La pregunta es qué podés asumir de los datos. Si el tamaño fijo se mantiene
a rajatabla, quizá sea lo más viable. Para las expresiones regulares habría
que determinar un patrón que distinga a cada campo (o al menos al primero,
parece). El tema es que ese patrón también se debe respetar a rajatabla,
salvo que te alcance con cubrir el 99% de los casos y tener algunos para
corregir (como en una migración puntual, pero decís "diariamente", por lo
que no).
Si el archivo puede llegar a ser grande (y la performance una
consideración), yo intentaría resolverlo con lo de los tamaños fijos...
Saludos,
Nacho
On 6/12/07, Fernando Castañeda <[EMAIL PROTECTED]> wrote:
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
_______________________________________________
ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar