Un problemino con Perl e Postgres
DisKre Panza
demokrito a tin.it
Dom 15 Lug 2001 19:29:50 UTC
Ciao a tutti!
Non sono morto, semplicemente mi sono messo a trafficare per
conto mio cercando di non fare piu` domande da 'RTFM'... :)
...e magari questa sara` cmq una di quelle...
Ho iniziato a studiare il Perl, e mi ci trovo 'abbastanza'
bene. E` cmq quel che cercavo per trattare i testi. Poi sono
passato a Postgres, e anche questo non c'e` male. Poi sono
passato all'unione dei due (ovvio, no?). Ecco, per ora non mi
interessano interazioni strane con il web, quelle semmai piu`
tardi.
Dunque: leggo un file composto da righe che contengono
ciascuna 3 campi separati dal carattere '|' (pipe, o or). Questo
e` il frammento che inserisce i dati nel database (che lui,
poverino, funziona!):
-----------------------------------------------------------------
$conn = Pg::connectdb("dbname=prova user=demokrito");
while( $riga = <IN> ) {
chop $riga;
@testo = split( /\|/, $riga );
$query = "INSERT INTO tabella (testo1, testo2, testo3)
VALUES ('@testo[0]', '@testo[1]', '@testo[2]')";
$result = $conn->exec( $query );
}
-----------------------------------------------------------------
Dove sta il problema? Semplicemente che in qualcuno dei vari
campi di testo - non importa quale, puo` essere qualsiasi - e`
presente il carattere < ' > (l'apostrofo), e cosi`, essendo la
query impostata appunto con gli apostrofi < ' @testo[0] ' >,
postgres se ne esce con un bel, ad esempio
> ERROR: parser: parse error at or near "asse"
perche' c'era una parola tipo < l'asse >... e ovviamente salta
l'inserimento dell'intero record.
Prima che mi si consigli di usare le "" (virgolette), oppure
di usare solo le < , > (virgole), come separazione, vi dico
subito che nei vari campi di testo possono esserci *anche* testo
fra "virgolette", ed anche virgole...
L'ideale sarebbe forzare il separatore fra i campi, per
esempio usando VALUES (|@testo[0]|, |@testo[1]|, |@testo[2]|)
(cosa che ho provato, per la serie non si mai... con il risultato
che vi lascio immaginare).
Insomma, sono a un punto fermo. Non so che pesci pigliare. Ho
cercato fra la documentazione, ma questa volta proprio non ne
sono venuto a capo
Grazie per l'aiuto.
--
Fakkino(?) DisKre Panza
Maggiori informazioni sulla lista
Lug
|