[inizio] [indice generale] [precedente] [successivo] [indice analitico] [contributi]


235. File con formati speciali

Uno degli aspetti deleteri dell'informatica è stato il proliferare di formati incompatibili nei file di dati.

In questo capitolo si raccolgono le informazioni sugli strumenti a disposizione per poter recuperare dati contenuti in file con un formato che in passato hanno avuto una certa diffusione. Come si può intuire, di solito non si tratta delle dotazioni normali di una distribuzione GNU/Linux, per cui, i programmi che vengono descritti qui vanno forse cercati tra i «contributi» esterni alla propria distribuzione.

235.1 Conversione da un insieme di caratteri a un altro

Quando si convertono dati da un formato a un altro, il primo problema è e quello di traslitterare l'insieme di caratteri. Purtroppo, non sempre è possibile «traslitterare» in modo reversibile, spesso si è costretti ad accettare una trasformazione che non permette più di riottenere lo stesso formato iniziale. Questo fatto si comprende facilmente pensando alla necessità eventuale di convertire un insieme di caratteri in un altro in cui non si dispone di alcuni simboli del primo.

Un caso particolare riguarda le conversioni di file di testo dove da un sistema di interruzioni di riga composte dalla sequenza <CR><LF> si vuole passare al solo <LF>. Per qualche motivo, il file di origine potrebbe contenere qualche codice <LF> isolato, che nel file di destinazione verrebbe interpretato alla fine come un'interruzione di riga. In pratica, se si volesse riconvertire il file nel formato precedente, tutti i codici <LF> verrebbero riconvertiti in <CR><LF>.

235.1.1 $ recode

recode [<opzioni>] <codifica-prima>:<codifica-dopo> [<file>...]

`recode' è un programma per la conversione di file da un insieme di caratteri a un altro. `recode' non si limita semplicemente a questo; spesso è in grado di intervenire anche su codifiche composte da sequenze di caratteri, anche se in queste situazioni il suo utilizzo si complica, e i risultati non sono sempre garantiti.

Osservando lo schema sintattico mostrato, si può vedere che è necessario indicare il tipo di conversione attraverso due parole chiave: la prima serve a stabilire il modo in cui sono codificati i dati in ingresso, la seconda stabilisce in che modo li si vuole trasformare in uscita.

Il file, o i file in ingresso possono essere indicati alla fine della riga di comando, e in tal caso `recode' tenta di sovrascriverli, oppure gli possono essere forniti attraverso lo standard input, e quindi il risultato della conversione si ottiene dallo standard output.

Bisogna essere prudenti con `recode' quando si indicano i file nella riga di comando, perché la conversione potrebbe essere irreversibile.

Nel suo piccolo, `recode' è un programma complesso. Questa sezione ne mostra solo alcuni aspetti banali, mentre per sfruttare bene tutte le sue potenzialità è necessario leggere la sua documentazione: recode.info.

Alcune opzioni

-a [<codifica>] | --auto-check [<codifica>]

Questa opzione è speciale e di solito viene usata da sola, senza indicare altri argomenti nella riga di comando di `recode'. Serve per ottenere da `recode' un riassunto sulle possibilità di conversione da o verso la codifica indicata.

-g | --graphics

Questa opzione riguarda la conversione dall'insieme di caratteri `IBM-PC', a un altro tipo, dove si vuole tentare di trasformare in qualche modo i simboli grafici tipici di quella codifica. È evidente che questa conversione è irreversibile.

Alcune codifiche

Le codifiche da utilizzare nelle conversioni sono indicate attraverso la notazione <codifica-prima>:<codifica-dopo>, come si vede nello schema sintattico introduttivo. Le parole chiave utilizzate per questo possono essere indicate indifferentemente utilizzando le lettere minuscole o maiuscole. L'elenco delle codifiche (e quindi delle trasformazioni possibili) è molto lungo, e potrebbe essere ottenuto un riepilogo attraverso l'opzione `-a'. Tuttavia, sarebbe meglio leggere prima ciò che è stato annotato nel documento recode.info al riguardo, per non rischiare di trovarsi poi nei pasticci.

Alcuni insiemi di caratteri hanno un nome standard che contiene il simbolo di due punti (`:'). Dal momento che questo crea ambiguità con i due punti utilizzati per separare la codifica iniziale da quella finale, si può scegliere un alias di quel nome che non ne contenga, oppure si possono proteggere utilizzando la barra obliqua inversa (`\'), tenendo conto eventualmente dei problemi che questo può dare con la shell utilizzata. In pratica, per scrivere `ISO_8859-1:1987', si potrebbe utilizzare la notazione `ISO_8859-1\:1987', oppure l'alias `ISO-8859-1'.

IBM437 | 437 | cp437

Rappresenta la codifica IBM usata normalmente nel Dos. Quando si converte da questa codifica a un'altra, i codici di interruzione di riga vengono lasciati inalterati.

IBM-PC | ibmpc

È praticamente la stessa codifica IBM437, con la differenza che quando si converte da questa codifica a un'altra, i codici di interruzione di riga vengono trasformati.

IBM850 | 850 | cp850

Rappresenta la codifica IBM usata normalmente nel Dos per la localizzazione europea.

ISO_8859-1:1987 | ISO_8859-1 | ISO-8859-1 | CP819 | IBM819 | iso-ir-100 | l1 | latin1

Si riferisce alla codifica ISO 8859-1.

Esempi

recode -a IBM437

Mostra tutte le possibilità di abbinamento con la codifica IBM437.

recode -a IBM-PC

Mostra tutte le possibilità di abbinamento con la codifica IBM-PC.

recode IBM-PC:ISO_8859-1 lettera

Converte il file `lettera' dalla codifica IBM-PC a ISO 8859-1, sovrascrivendo il file.

recode IBM-PC:ISO_8859-1 < lettera > lettera2

Converte il file `lettera' dalla codifica IBM-PC a ISO 8859-1, generando il file `lettera2'.

recode -g IBM-PC:ISO_8859-1 < schema1 > schema2

Converte il file `schema1' dalla codifica IBM-PC a ISO 8859-1, generando il file `schema2', tentando di convertire anche i simboli grafici.

235.2 File .DBF -- dBase III e derivati

Il software basato sui file in formato `.DBF', ovvero quelli di dBase III, è stato molto importante nell'ambito del sistema operativo Dos. Nel suo piccolo ha permesso agli utenti di quel sistema operativo di realizzare delle strutture di dati che si avvicinavano alle potenzialità di una base di dati relazionale.

Ancora oggi si trovano programmi applicativi gestionali basati su questo formato, scritti probabilmente con il famoso compilatore Clipper. Volendo, esiste del software proprietario che permette di gestire questi file anche con GNU/Linux, ma c'è almeno la possibilità di leggere il contenuto di questi attraverso il programma `dbview'.

235.2.1 $ dbview

dbview [<opzioni>] <file-dbf>

Il programma `dbview' consente di leggere il contenuto dei file `.DBF' di dBase III, e probabilmente anche le versioni di dBase IV. Se viene avviato senza opzioni, si ottiene la visualizzazione del contenuto del file indicato nel formato predefinito, come si vede dall'esempio seguente:

Articolo   : 1         
Descr      : bicicletta uomo                         
Prezzo u   : 500.00
Import     : T
Scadenza   : 20011120
Note       : 2

Articolo   : 2         
Descr      : bicicletta donna                        
Prezzo u   : 550.00
Import     : 
Scadenza   : 20011120
Note       : 3

Articolo   : 3         
Descr      : bicicletta uomo/donna leggera           
Prezzo u   : 600.00
Import     : 
Scadenza   : 20011120
Note       : 4

In realtà, in questo modo, i nomi dei campi vengono mostrati in modo diverso dal reale, utilizzando anche le lettere minuscole ed eliminando i simboli di sottolineatura. Utilizzando l'opzione `-r', il primo record apparirebbe così:

ARTICOLO   : 1         
DESCR      : bicicletta uomo                         
PREZZO_U   : 500.00
IMPORT     : T
SCADENZA   : 20011111
NOTE       : 2

È necessario osservare che i campi booleani, e in questo caso si tratta di quello intitolato `IMPORT', mostrano solo la lettera `T' per i valori booleani Vero, altrimenti non si ha alcuna indicazione; inoltre, le date vengono espresse secondo il formato <AAAA><MM><GG>. Infine, dall'esempio non si intuisce, ma il campo `NOTE' è di tipo «memo», e in questo caso si sono persi i dati.

I dati contenuti nei file `.DBF', dal momento che sono stati memorizzati presumibilmente utilizzando il sistema operativo Dos, utilizzano molto probabilmente un insieme di caratteri diverso da Latin 1 o comunque diverso da ciò che si utilizza con GNU/Linux. Pertanto, è probabile che sia necessario rielaborare ciò che si ottiene con `dbview' attraverso un programma di conversione come `recode'. Tuttavia, è bene considerare che nella storia dei file `.DBF' sono state usate anche codifiche differenti dal solito IBM437, e di questo occorre tenerne conto quando ci si accorge che la conversione non funziona come ci si aspetterebbe.

Alcune opzioni

--browse | -b

Se si utilizza questa opzione, i record vengono mostrati su una sola riga per volta, separando i campi con un simbolo, il separatore, che di solito è costituito dai due punti (`:').

--delimiter x | -d x

Con questa opzione è possibile specificare il simbolo da utilizzare per separare i campi dei record che vengono visualizzati. Il simbolo di separazione predefinito sono i due punti (`:')

--description | -e x

In questo caso, oltre a mostrare il contenuto del file, nella parte iniziale vengono riepilogate le caratteristiche dei campi contenuti.

--omit | -o x

Non elenca il contenuto del file, ma si limita a dare le altre informazioni se richieste attraverso le opzioni opportune.

--reserve | -r x

Mostra i nomi dei campi così come sono stati memorizzati.

Esempi

dbview articoli.dbf

Elenca il contenuto del file `articoli.dbf' nella forma predefinita.

dbview -b articoli.dbf

Mostra i record utilizzando una sola riga per ognuno.

dbview -b articoli.dbf | recode ibm437:latin1

Come nell'esempio precedente, ma utilizza `recode' per trasformare i caratteri speciali che altrimenti non sarebbero visibili correttamente (per esempio le lettere accentate).

235.2.2 $ dbf2pg

dbf2pg [<opzioni>] <file-dbf>

Il programma `dbf2pg' consente di leggere il contenuto di un file `.DBF' e di inserire i dati relativi in una tabella di una base di dati di PostgreSQL (capitolo 190 e seguenti). In base alle opzioni che vengono indicate, i dati possono essere aggiunti a una tabella esistente, oppure possono sostituire le righe di tale tabella, oppure si può creare una tabella da zero. Quello che conta è che i permessi fissati attraverso PostgreSQL consentano l'accesso e le operazioni che si intendono svolgere.

`dbf2pg' non è in grado di trasferire i campi «memo», quelli che tradizionalmente venivano creati utilizzando file con estensione `.DBT'.

Alcune opzioni

-v

-vv

Permette di avere informazioni sulle operazioni, e in particolare, nel secondo caso il dettaglio è maggiore.

-h <host>

Permette di specificare il nodo a cui accedere per connettersi con il servente di PostgreSQL. In mancanza di questa indicazione, viene tentato l'accesso a `localhost'.

-d <base-di-dati>

Permette di specificare il nome della base di dati a cui ci si vuole connettere. In mancanza di questa indicazione, viene tentata la connessione con la base di dati `test'.

-t <tabella>

Permette di specificare il nome della tabella in cui si vogliono trasferire i dati del file `.DBF'. In mancanza di questa indicazione, viene tentato l'inserimento nella tabella `test'.

-D

Con questa opzione, si fa in modo di cancellare il contenuto della tabella di destinazione, prima di iniziare l'inserimento dei dati.

-c

Richiede espressamente che sia creata la tabella di destinazione. In mancanza di questa opzione, la tabella deve essere già disponibile, altrimenti l'operazione fallisce. Nel caso si utilizzi questa opzione mentre una tabella con lo stesso nome esiste già, si ottiene la cancellazione del suo contenuto prima di iniziare, come se fosse stata usata al suo posto l'opzione `-D'.

-f

Prima di procedere, converte i nomi dei campi in modo che questi siano scritti utilizzando solo lettere minuscole.

-l

-u

Con l'opzione `-l' si fa in modo che il contenuto dei campi venga convertito in lettere minuscole, mentre con l'opzione `-u' si ottiene una conversione in maiuscole.

-s <nome-vecchio>=<nome-nuovo>[,<nome-vecchio>=<nome-nuovo>]...

Con questa opzione si può stabilire la sostituzione di alcuni nomi dei campi della tabella. Ciò può essere particolarmente utile nel caso in cui i nomi originali siano incompatibili con PostgreSQL.

-s <n-riga-iniziale>

-e <n-riga-finale>

Le opzioni `-s' e `-e' permettono di definire l'intervallo di righe da trasferire, dove nel primo caso si indica la riga iniziale e nel secondo quella finale. Se non si indicano, il trasferimento parte dall'inizio e prosegue fino alla fine.

Esempi

dbf2pg -d Anagrafe -c -t Indirizzi address.dbf

Crea la tabella `Indirizzi' nella base di dati `Anagrafe' disponibile presso l'elaboratore locale, prelevando i dati dal file `address.dbf'.

dbf2pg -h localhost -d Anagrafe -c -t Indirizzi address.dbf

Esattamente come nell'esempio precedente, con l'indicazione precisa del nodo locale.

235.3 File tipici di MS-Windows

Alcuni formati di file utilizzati con MS-Windows sono considerati da molti degli «standard». Tra tutti, il più «importante» è quello di MS-Word, con in più il problema che di questo ne esistono molte versioni.

235.3.1 $ mswordview

mswordview [<opzioni>] <file-doc>

`mswordview' è un programma il cui scopo è quello di convertire file di MS-Word in HTML. La conversione non può essere perfetta, ma il progetto è condotto con impegno e i risultati che dà questo programma sono buoni.

Inizialmente, `mswordview' è in grado di convertire i file di MS-Word 8, ma dovrebbero aggiungersi successivamente anche i formati precedenti.

`mswordview' è in grado di convertire solo un file alla volta, precisamente quello che viene indicato alla fine degli argomenti. Se non viene richiesto qualcosa di particolare attraverso le opzioni, `mswordview' tenta di creare un file con lo stesso nome di quello che viene convertito, con l'aggiunta dell'estensione `.html'. Inoltre, se il file contiene delle immagini incorporate, queste vengono trasferite su file esterni.

Alcune opzioni

-o <file-html> | --outputfile <file-html>

Permette di indicare esplicitamente il file HTML che si vuole generare.

-g <file-errori> | --errorfile <file-errori>

Permette di annotare gli errori incontrati durante la conversione nel file indicato.

---------------------------

Appunti Linux 2000.04.12 --- Copyright © 1997-2000 Daniele Giacomini --  daniele @ pluto.linux.it


[inizio] [indice generale] [precedente] [successivo] [indice analitico] [contributi]