On Feb 2, 2011, at 3:00 PM, Rodrigo Ruiz Fuentes wrote:
> la situación es la siguiente, tengo un archivo grande en formato CSV, 
> separado por puntos y comas (;) y delimitado por comillas dobles ("), en los 
> campos 4 y 5 vienen latitudes y longitudes respectivamente, a veces el dato 
> viene mal y vacío, o sea ""... necesito revisar el archivo y eliminar las 
> lineas que en el campo 4 y 5 sean "" (vacías).
> Me indicaron que con sed podía hacer eso, algo logré, sin embargo hay mas 
> campos que si pueden ser vacíos, pero no se debe eliminar la línea completa, 
> entonces ahí es el problema, no sé como indicar que verifique la posición 4 y 
> 5 solamente.
> Mis conocimientos en expresiones regulares y sed son limitados, por no decir 
> nulos, si alguien me da una mano, se agradecerá mucho.

Todo eso es tan de la vieja escuela... acá una solución en ruby 1.9 que tu 
mismo puedes entender y modificar a gusto:

----- ini -- procesar.rb ------
#!/usr/bin/ruby1.9.1

require 'csv'

CSV.open('resultado.csv', 'wb', :col_sep => ';', :force_quotes => true) do |out|
  CSV.foreach('prueba.csv', :col_sep => ';') do |fila|
    if fila[3] == "" or fila[4] == ""
      puts 'Ignorando fila: ' + fila.to_s
    else
      out << fila
    end
  end
end
----- procesar.rb -- fin ------

----- ini -- procesar.rb ------
"HOLA";"1";"ESTAS TÚ?";"";""
"HOLA";"2";"ESTAS TÚ?";"a";""
"HOLA";"3";"ESTAS TÚ?";"";"b"
"HOLA";"4";"ESTAS TÚ?";"c";"d"
"HOLA";"5";"ESTAS TÚ?";"";""
"HOLA";"6";"ESTAS TÚ?";"e";"f"
----- prueba.csv -- fin ------


ejecución:
$ sudo apt-get install ruby1.9.1
$ chmod a+x procesar.rb
$ ./procesar.rb


Mas info en http://www.ruby-doc.org/stdlib/libdoc/csv/rdoc/index.html ... 
Bueno, quedó en bandeja de plata ¿Qué premio ganamos? ;)



Aldrin Martoq
http://aldrin.martoq.cl/





Responder a