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/