[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico] [volume] [parte]


Capitolo 342.   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.

342.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>.

342.1.1   $ recode

recode [opzioni] codifica_prima..codifica_dopo [file...]

recode (1) è 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.

Uno o più file in ingresso possono essere indicati alla fine della riga di comando, facendo sì che recode tenti di sovrascriverli; in alternativa, un file in ingresso può essere fornito attraverso lo standard input, ottenendo come il risultato della conversione 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 mostra solo alcuni aspetti banali, mentre per sfruttare bene tutte le sue potenzialità è necessario leggere la documentazione originale: 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.

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.

342.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. Attualmente è disponibile il compilatore Harbour, che si ripromette di offrire un ambiente totalmente compatibile con il passato; tuttavia è possibile leggere il contenuto di questi attraverso alcuni piccoli programmi.

342.2.1   $ dbview

dbview [opzioni] file_dbf

Il programma dbview (2) 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 trattini bassi. 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 (in questo caso si tratta di quello intitolato IMPORT) mostrano solo la lettera T per il valore 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 con un 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).

342.2.2   $ dbf2pg

dbf2pg [opzioni] file_dbf

Il programma dbf2pg (3) 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 324 e successivi). 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 svolte, ottenendo un dettaglio maggiore nel secondo caso.

-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.

342.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.

342.3.1   $ mswordview

mswordview [opzioni] file_doc

mswordview (4) è 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.

342.3.2   $ catdoc

catdoc [opzioni] file_doc
catdoc [opzioni] < file_doc

catdoc (5) è 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 dallo standard output dopo una conversione in formato testo. Se il file originale contiene in realtà solo testo puro, non avviene alcuna conversione.

Alcune opzioni

-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.

Configurazione

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.

Esempi

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.

342.3.3   $ antiword

antiword [opzioni] file_doc...

antiword (6) è un programma molto semplice per convertire file dal formato MS-Word (versione 6 o successiva) in testo puro e semplice, oppure in PostScript , estrapolando anche le immagini. Il suo funzionamento è intuitivo e in generale non servono opzioni: il file indicato come argomento, viene emesso attraverso lo standard output dopo la conversione.

Alcune opzioni

-t

Genera una conversione in formato testo puro e semplice. L'uso di questa opzione è implicito.

-w n_colonne

Permette di specificare, nell'ambito di una conversione in formato testo, l'ampiezza del testo in caratteri. Se si utilizza il valore zero, si ottiene ogni paragrafo in una sola riga.

-m file_mappa

Consente di indicare la conversione che si vuole ottenere da Unicode in un insieme di caratteri a 8 bit. Se non si usa questa opzione, è come se fosse stato stabilito -m 8859-1.txt, corrispondente alla richiesta di ottenere una conversione nello standard ISO 8859-1. Questi file di conversione dovrebbero trovarsi nella directory /usr/share/antiword/.

-p dimensioni_carta

L'utilizzo di questa opzione richiede implicitamente la conversione in formato PostScript, mentre in condizioni normali si ottiene un testo puro e semplice. L'argomento dell'opzione stabilisce la dimensione della carta e può trattarsi delle parole chiave seguenti, con il significato intuitivo che hanno: 10x14, a3, a4, a5, b4, b5, executive, folio, legal, letter, note, note, quarto, statement, tabloid.

-L

Nell'ambito di una conversione in PostScript, indica un orientamento orizzontale del foglio.

-i livello_di_visualizzazione_immagini

Consente di specificare cosa fare delle immagini che fossero eventualmente contenute nel file di partenza. L'argomento è un numero che ha il significato descritto nell'elenco seguente.

  • 0 genera un file compatibile con Ghostscript, ma non adatto a stampanti PostScript comuni. Tuttavia, in condizioni normali, se si arriva alla stampa, si passa generalmente per Ghostscript, per cui questo valore è quello che può essere adatto.

  • 1 non estrapola le immagini.

  • 2 PostScript livello 2.

  • 3 PostScript livello 3.

-s

Include anche il testo nascosto, indicato come tale nel file originale.

Esempi

antiword pippo.doc | less

Visualizza il contenuto del file pippo.doc, con l'aiuto di less per scorrerlo.

antiword -p a4 pippo.doc > pippo.ps

Genera il file pippo.ps (PostScript, A4) a partire da pippo.doc.

Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org

1) recode   GNU GPL

2) dbview   GNU GPL

3) dbf2pg   software libero con licenza speciale

4) mswordview   GNU GPL + alcuni file con licenza speciale

5) catdoc   GNU GPL

6) Antiword   GNU GPL


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome file_con_formati_speciali.html

[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico]