[>a2317.html>] [<a2315.html<] [^a2.html^]
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.
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>.
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.
-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.
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.
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.
$
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.
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.
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 AAAAMMGG. 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.
--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.
$
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).
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 196 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 |
-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.
$
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.
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.
mswordview [opzioni] file_doc
mswordview (1) è 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.
-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.
catdoc [opzioni] file_doc catdoc [opzioni] < file_doc
catdoc (2) è un programma molto semplice, che si sostituisce idealmente a cat quando si tratta di visualizzare il contenuto di file scritti in formato MS-Word. Il suo funzionamento è intuitivo e in generale non servono opzioni: il file indicato come argomento, o fornito attraverso lo standard input, viene emesso attraverso lo standard output dopo una conversione in formato testo. Se il file originale contiene in realtà solo testo puro, non avviene alcuna conversione.
-b
Cerca di elaborare anche file MS-Word che apparentemente non lo sono, a causa di una firma iniziale errata.
-mn
Specifica il margine destro del testo ottenuto. Il margine predefinito è a colonna 72. Si osservi che l'opzione -m0 equivale a -w.
-w
Specifica il margine destro del testo ottenuto di lunghezza indefinita, in modo da ottenere che i paragrafi occupino una riga intera.
-v
Genera alcune informazioni diagnostiche prima del testo trasformato.
Per quanto semplice, catdoc prevede una configurazione, composta dal file /etc/catdocrc
per il sistema, e dai file ~/.catdocrc
per gli utenti. Senza entrare nel dettaglio delle direttive di configurazione, è il caso di descrivere quella che rappresenta l'impostazione comune:
charset_path=/usr/lib/catdoc map_path=/usr/lib/catdoc source_charset=cp1252 target_charset=8859-1 unknown_char='?'
Come si può intuire, le direttive charset_path e map_path servono a indicare la collocazione di file utilizzati da catdoc per la conversione. La direttiva source_charset permette di stabilire la codifica predefinita del file sorgente, quando questo non appare utilizzare la UTF-16. La direttiva target_charset permette di definire la codifica da usare per il testo generato; come si vede nell'esempio viene usata la codifica ISO 8859-1. Infine, è possibile stabilire in che modo mostrare i caratteri che non possono essere rappresentati, attraverso la direttiva unknown_char, che in questo caso usa il punto interrogativo.
$
catdoc pippo.doc | less
Visualizza il contenuto del file pippo.doc
, con l'aiuto di less per scorrerlo.
$
catdoc pippo.doc > pippo.txt
Genera il file pippo.txt
a partire da pippo.doc
.
1) mswordview GNU GPL + alcuni file con licenza speciale
2) catdoc GNU GPL