Da dbf a bib e Jabref

iw9cmd flavio iw9cmd@libero.it
Gio 3 Nov 2005 20:24:12 CET


Ilbuonme ha scritto:
 > Ciao a tutti!
 > Avete idea di come si possa convertire un database .dbf di quelli
 > che OpenOffice crea per la bibliografia in uno .bib?
 > Io ho quasi un migliaio di articoli, libri etc. catalogati in un
 > database .dbf, con campi 'personalizzati' tipo "reperito" (booleano:
 > vero/falso), oppure "collocazione a Palermo" (dove si trova nelle mie
 > biblioteche di facoltà) etc.  Vorrei passare al formato .bib, e ad
 > un'applicazione tipo Jabref, ma non posso reinserire tutte le entry ad
 > una ad una!
 > Provando a salvare il file dbf come cvs o txt, la funzione di
 > importazione di Jabref non lo riconosce.
 > E un'ultima domanda: nel formato .bib, e soprattutto con Jabref (e
 > programmi affini), si possono aggiungere campi personalizzati, come
 > quelli che citavo sopra ("reperito", "collocazione" etc.)?

bibtex , che io ne sappia, non gestisce i campi personalizzati, per
ogni categoria ha i suoi campi e basta. L'unica scappatoia è il campo
annote che permette di scrivere un commento non visualizzato o il
comando note che permette di scrivere un commento visualizzato nelle
bibliografia.
Puoi scrivere qualsiasi cosa con i commenti ma penso proprio che non
sia questo che ti interessa.

 > Ho provato a scaricare un'applicazione "dbf2bib", trovata in un
 > angolo di internet (un solo risultato sotto Google), ma non funziona
 > quando da console lo eseguo con ./dbf2bib.

suggerimento:
dividi gli articoli in tabelle diverse a seconda di che si tratta
(oppure metti un flag di riconoscimento ad ogni voce della
bibliografia che so a nel primo campo per articolo l per libro...).
Esporta le tabelle una ad una in csv usando un separatore
scognito, tipo @, $ o £. Poi converti con uno scriptino in bash o in
perl che scriva un file bibtex. Poi unisci i file e il gioco è fatto.
Se hai messo il flag lo script dovrà contenere un po' di logica di
controllo tipo se il primo campo è una a allora...
E in questo caso la tabella sarà unica.
Ho uno scriptino in bash che se ne occupa ma è una ciofeca che va
modificata per ogni tipo voce e che funziona per tabelle singole.
L'ho fatto in un momento in cui avevo poco tempo per  pensare a cose
più complicate e avavo pochi tipi di voce. Altri sapranno fare
certamente di meglio.

#!/bin/bash
entry=@Article{A_
file=art.csv
numlinee=`wc -l $file |cut -d" " -f1`
i=0
while [ $i -lt $numlinee ]
   do
   i=$(( $i + 1 ))
   linea=`head -n $i $file|tail -1`
   author=`echo $linea|tr -d \"|cut -d$ -f1`
   title=`echo $linea|tr -d \"|cut -d$ -f2`
   jour=`echo $linea|tr -d \"|cut -d$ -f3`
   year=`echo $linea|tr -d \"|cut -d$ -f4`
   vol=`echo $linea|tr -d \"|cut -d$ -f5`
   pag=`echo $linea|tr -d \"|cut -d$ -f6`
   echo $entry$i,
   echo author={$author},
   echo title={$title},
   echo journal={$jour},
   echo year={$year},
   echo volume={$vol},
   echo pages={$pag},
   echo }

Questo converte un file csv (art.csv) solo di articoli coi campi 
separati da $ la cui
sintassi è:
autore$titolo$giornale$anno$volume$pagina$
tr -d \" serve per levare " che avevo utilizzato come indicatore di
testo. Con un case, un flag nel primo campo un po' di copia e incolla
e un minimo di attenzione dovresti arrivare a quello che vuoi.

Ciao

iw9cmd flavio

P.S.: altri avranno a che dire sull'uso improprio di bash e diranno
che era meglio il perl, awk o altra roba del genere. A me veniva
comodo così, anche se è poco ortodosso.


Maggiori informazioni sulla lista palermo