[Gfoss] JOIN SHP-DBF

>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 àèìòù