Re: Considerar '' como nulo en carga de datos desde csv

From: Gunnar Wolf <gwolf(at)gwolf(dot)org>
To: Rodrigo Ruiz Fuentes <rruizf(at)gmail(dot)com>
Cc: Jorge Tornero <jorge(dot)tornero(at)cd(dot)ieo(dot)es>, francisco(dot)morosini(at)gmail(dot)com, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Considerar '' como nulo en carga de datos desde csv
Date: 2011-02-09 16:32:40
Message-ID: 20110209163240.GF9100@gwolf.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Rodrigo Ruiz Fuentes dijo [Wed, Feb 02, 2011 at 01:06:17PM -0300]:
> OK, agradezco tu ayuda, bueno, definitivamente utilicé el comando
> entregado con sed (no soy bueno con dicha herramienta) y limpia el
> archivo, primero intenté quitando todas las comillas dobles, luego saque
> el QUOTE del COPY, pero aún así me arroja errores, luego reemplacé todas
> los "" por "\N" para que los considerara como nulos, pero continúa dando
> errores.
> Definitivamente, he decidido que no me sirve de lada tener un dato nulo
> en una longitud o latitud, por lo tanto eliminaré la linea si uno de
> dichos campos es vacio ("" especificamente)... como señalé antes no
> manejo bien sed ni expresiones regulares, si pudieran ayudarme a hacer
> esta operación, estaría agradecido, se que quizás no es la lista
> apropiada, de otro modo lanzo la pregunta a una de linux..
> El archivo CSV tiene en las posiciones 4 y 5, latitud y longitud
> respectivamente, entonces habría que procesar el archivo, buscar en
> dichas posiciones valores "" y eliminar la linea... no me sirve buscar
> en toda la linea, pues hay campos de texto que si podrían ser "", los
> campos estan delimitados por punto y coma (;).

Puede servirte algo como lo siguiente:

cat datos | perl -n -e '@lin=split/;/; next if $lin[3] eq q("") or $lin[4] eq q(""); print join(";",@lin)'

No lo probé, pero debe funcionar. Vamos, eso de que hacer "un
programa" para procesar tus datos... No es tan pesado como suena ;-)

En este caso, la línea que te presento se traduce a:

- El switch -e de perl le indica que no lea el programa del disco,
sino que se lo paso a continuación↓

- El switch -n de perl indica que llame al programa que le especificas
(en este caso, lo que sigue al '-e') repetidamente, entregándole el
archivo línea por línea.

- @lin = split /;/ - Toma los datos de la línea en cuestión (que
están en la variable default, $_, que puede omitirse) y los separa
por el caracter ';', guardando el resultado en el arreglo @lin

- Si el cuarto o quinto elemento de @lin (recuerda que el primer
elemento es [0]) son iguales a la cadena '""', omite la línea y pasa
a la siguiente. Claro, no usé '""' porque estoy ya dentro de
comillas sencillas - Es equivalente a usar q("").

- Por último, imprime @lin, unido por el caracter ";"

Claro, por ahí podría ser más limpio asignar al principio a una
variable con permanencia (digamos, iniciar con "$lin = $_; @lin =
split..."), y al final imprimir $lin en vez de juntarlo de
vuelta... Queda a tu discreción.

Saludos,

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Gunnar Wolf 2011-02-09 16:37:40 Re: [pgsql-es-ayuda] Dilema con Strroed procedures en Postgres
Previous Message Rafael Martinez 2011-02-09 13:31:45 Re: Controlador JDBC pg 9