[Gfoss] JOIN SHP-DBF

Andrea Peri aperi2007 a gmail.com
Dom 10 Gen 2010 12:27:11 CET


>Sembra che si aspetti di trovare un file DBF con linee che terminano in
>'\r' (Carriage Return per capirci) e invece non è così.
>
>Il DBF che usi come è creato?

Permettetemi di contribuire con una utile informazione in merito al
formato DBF, che conosco molto bene fin dai tempi di Aston-Tate.

Il formato dbf e' stato promulgato dalla societa' ASton-tate negli anni 80.
La versione piu' diffusa era la versione 3 (DbaseIII).
Una delle caratteristiche di tale formato. Quella che penso sia alla
base dell'errore che state incontrando e' che
nel caso di campi testuali, il formato originale prevedeva che il
campo venisse comunque sempre riempito con degli spazi,

ovvero se il campo testuale era di 20 caratteri e ci si voleva
immettere il valore "pippo",
nel file dbf esso sarebbe stato memorizzato come

"pippo               "

La ragione di questo era legata al fatto che i records erano posizioneli, ovvero
ogni record era sempre a lunghezza fissa e se si voleva rintracciare
il 12-mo record
bastava moltiplicare il numero di record con l'ampiezza del record
(che era fissa), ci si sommava l'header , anche esso a lunghezza fissa
e si otteneva cosi' l'offset che occorreva usare per rintracciare
l'inizio del 12-mo record.

Purtroppo in seguito al grande successo che ottenne il formato dbf,
molti produttori concorrenti, anche per non pagare eventuali
royalites,
cominciarono a sviluppare delle librerie che inserivano piccole
differente nel formato, sempre cercsndo di salvaguardare una certa
compatibilita'.

Un esmepio di prodotto che usava il formato dbf era il compilatore "clipper".
Il quale pero' introdusse una variante.

Ovvero nel caso di campi testuali inseriva un carattere di fine testo,
oltre a completare il campo con gli spazi (ovviamente).

per cui la famosa frase "pippo", che nel dbf standard veniva memorizzata come
"pippo               "


nei dbf prodotti dal clipper veniva memorizzata come
"pippo\0             "


Chiaramente queste piccole differenze avevano l'effetto che in certi
casi si aveva dei malfunzionamenti , specie quando avvenivano dei
cross-exchange, ovvero
degli scambi tra file dbf prodotti in un ambiente e letti in un altro.

Io credo che nel vostro caso ci si trovi in una situzione analoga,
ovvero il file dbf e' stato prodotto in un certo ambiente, pero' la
libreria che
tenta di leggerlo (su python) si aspetti che i valori immessi nei
campi testuali abbiano sempre il carattere \r.

Da qui l'errore.




-- 
-----------------
Andrea Peri
. . . . . . . . .
qwerty àèìòù
-----------------
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.faunalia.it/pipermail/gfoss/attachments/20100110/83771744/attachment.htm>


Maggiori informazioni sulla lista Gfoss