Re: función csvstring_to_recordset

From: "Haroldo Stenger" <haroldo(dot)stenger(at)gmail(dot)com>
To: "Haroldo Stenger" <haroldo(dot)stenger(at)gmail(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org, "Alvaro Herrera" <alvherre(at)dcc(dot)uchile(dot)cl>
Subject: Re: función csvstring_to_recordset
Date: 2006-07-23 01:28:40
Message-ID: d33fde4e0607221828g1345575fne748fa78e49fe893@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola Alvaro

El 19/07/06, Alvaro Herrera<alvherre(at)commandprompt(dot)com> escribió:
> > CREATE OR REPLACE FUNCTION csvstring_to_recordset(text)
> > RETURNS SETOF text AS
> > $BODY$
> > select split_part($1, ',' , x.i) from (select
> > generate_series(1, (length($1)-length(replace($1, ',' , '' )) ) +1)
> > as i) x
> > $BODY$
> > LANGUAGE 'sql' IMMUTABLE;
>
> Hmm, que pasa si hay una coma dentro de un string rodeado por comillas?
>
> O sea esto
>
> "Perez, Pedro",204-5031,"Victoria St.,290"
>
> deben ser tres campos, no cinco.

No está contemplado :( El tema es, por un lado que la demanda original
no tenía campos entrecomillados, por lo cual para ese caso funcionó.
Por otro, este abordaje con funciones estándar de PostgreSQL de manejo
de strings, no parece ser el más adecuado, a menos que aparezca esa
mágica expresión regular que pueda ser puesta como separador a la
funcion split_parts (que me parece una "maravillosa" función :)
Encontré por ahí esta regex ,(?=([^"]*"[^"]*")*(?![^"]*"))

que todavía no intenté descifrar, que algo tiene que ver con el
formato CSV, aunque creo que en lugar de sevir como separador, sirve
como agrupador de los campos propiamente dicho, o sea el inverso de lo
que split_parts pide.

Esto lo tomé como un juego, y definitivamente sirve sólo para un caso
particular de CSV, y en caso de CSV full-syntax, no hay más remedio
que abordar el problema con cañones de mayor calibre.

un abrazo

Haroldo

--

b l o g http://reenunciadosrenunciados.blogspot.com/ b l o g

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Juan Martínez 2006-07-23 23:05:05 Re: ayuda con query
Previous Message Javier Villalba 2006-07-22 22:50:46 Fwd: formato de fechas