io sto lavorando al lato python-uno, sto cercando di capire come creare una tabella.
se provi a estrarre una query ddl con mdb-schema vedrai che basta lanciarla in oo e ti ricrea la tabella con le stesse definizioni
ottimo, non avevo ancora provato mdb-schema
poi dopo mi manca la creazione di un nuovo db e un qualche sistema di mapping tra i tipi di dato di access e quelli di openoffice.
non ho capito spiegati meglio, che intendi?
devo vedere come creare da zero il file odb, se non riesco se ne crea un vuoto all'inizio e poi lo si duplica.
alcuni tipi di campo non esistono su hsql, ad esempio il TEXT, non è un problema, ma va fatta l'associazione tra il formato di access e quello oo
Ed è questo quello su cui mi sto cimentando, una volta capito un po meglio le routine e le funzioni necessarie in python non credo di avere grossi problemi
su python non dovrebbero esserci problemi con quel modulo csv che si occupa da solo di dividere le righe in campi, senza doversi trovare le posizioni delle virgole, anche se ci sono stringhe in mezzo.
Il mio dubbio, dovuto anche alla scarsa esperienza di programmazione in ambiente linux, è se conviene fare una routine esterna o una supermacro interna a oo....tu che dici?
entrando più nel dettaglio, il csv fornisce un metodo iteratore, ottimo anche per tabelle di grosse dimensioni, senza precaricare i dati in memoria.
ricordando che bisogna mettere assieme analisi delle tabelle, gui ed esportazione è strettamente necessario separare le tre questioni.
più in particolare, faremo un metodo ad esempio
def listTables(filename):
proc = subprocess.Popen(['mdb-tables', '-t', 'table', '-1', filename], stdout=subprocess.PIPE)
return proc.communicate()[0].split('\n')
Questo primo metodo richiama mdb-tables e riporta su ciascuna riga una tabella, restituendo una lista di tabelle quindi, anche se ci sono spazi in mezzo non importa. Dalla gui si ciclerà l'elenco e si proporranno le tabelle
in fase di esportazione servirà una prima funzione che generi lo schema di una singola tabella, lo si fa alla stessa maniera con subprocess.Popen ma richiamando mdb-schema. il risultato andrà trattato con una funzione che effettui le dovute conversioni dei campi che quindi sarà passata via python-uno a Oo per la ricreazione della singola tabella.
per i dati ci metteremo d'accordo, basta una funzione di poche righe che sfrutti l'iteratore fornito dal modulo csv, ci sono esempi qui
http://docs.python.org/library/csv.htmlfor row in reader:
values = []
for field in row:
values.append(field)
scrittura con pyuno(values)
il resto andrà infarcito della gui e dell'avanzamento, non mi pare serva altro.
ciao