Database - Come esportare i dati da Gestionale Buffetti a Danea Easyfatt
Qualche tempo fa un cliente che possiede una carpenteria ha accettato di passare dal suo precedente gestionale, per l'appunto Buffetti, al più semplice ed elastico (a mio avviso) Danea Easyfatt.
La cosa interessante di quest'ultimo prodotto è che è maneggevole e si può leggerne il database anche da altri applicativi, grazie al fatto che il database è creato sulla base di Microsoft Access 2003.
Tuttavia, specie se il precedente sistema non è aggiornato, l'esportazione/importazione dati da un gestionale all'altro non è qualcosa di automatico. Spesso il passaggio è doloroso e comporta perdita di dati.
Non si può effettivamente creare una procedura indolore. Spesso e volentieri, ci si trova anche di fronte ad errori di inserimento il che rende la successiva importazione assai problematica.
Tuttavia, certi errori li si corregge volentieri a mano a fronte di un'importazione seppur parziale di più di 1000 tra clienti e fornitori.
Nel caso specifico, il gestionale Buffetti dal quale sono stati tratti i dati, non consentiva un'esportazione se non attraverso stampa su file. La stampa, generava un file di testo (estenzione .txt) contenente un elenco di tutti i dati del database.
La domanda è: Come convertire un semplice file di testo in un file di tipo CSV facilmente importabile in Excel o altri programmi per una successiva manipolazione dei dati?
Osservandone la struttura, dopo l'intestazione, ogni riga rappresentava un cliente (o fornitore). Ogni cliente o fornitore, era suddiviso per campi di larghezza fissa. Questo è il punto di partenza sul quale costruire lo script per estrarre i dati e creare un file di tipo csv partendo dal file originale!
Realizzazione dello script PHP
Anche se non è l'approccio migliore, ho deciso di usare il linguaggio PHP e di manipolare il file attraverso uno script lanciato da webserver Apache in locale. Il metodo è semplice e molto rapido.
Per prima cosa, per evitare di complicarmi eccessivamente la vita, con un semplice Sostituisci da un qualsiasi editor di testo (io ho usato Gedit) ho eliminato tutte le intestazioni. Una volta modificato il file di testo, esso contiene riga per riga i soli dati dei fornitori.
La prima riga di codice nello script, sarà quindi dedicata a stampare a video l'intestazione del nuovo file:
0
'"Ragione Sociale","Nome","Codice","Partita IVA","Indirizzo","Localita","CAP","Pv","PF"<br/>';
In seguito, essendo ogni campo di larghezza fissa, una volta prelevata una riga di testo dal file esportato, posso dire con precisione quanti caratteri estrarre per ottenere le informazioni relative al singolo campo per singolo cliente.
Dopo aver aperto il file:
0
$fp = fopen('fornitori.txt','r') or die ("can't open file");
Elaboro ciclicamente ogni riga, suddividendola per campo e assegnando ognuno di essi alle celle di un array.
0
while ($s = fgets($fp,1024)) {
1
$fields[
2
$fields[2] = ($s,36,22);
3
$fields[3] = ($s,58,4);
4
$fields[4] = ($s,62,12);
5
$fields[5] = ($s,74,21);
6
$fields[6] = ($s,95,26);
7
$fields[7] = ($s,121,6);
8
$fields[8] = ($s,127,3);
9
$fields[9] = ($s,130,1);
10
csv_line($fields);
11
}
La funzione csv_line(array) che richiamo alla fine del ciclo, non fa altro che stampare l'array passatogli generando così la riga rappresentante il fornitore, rispettando il classico formato dei file CSV:
0
function csv_line($line){
1
$csv_line = '"';
2
foreach($line as $field)
3
{
4
$csv_line .= str_replace('_', ' ', $field).'","';
5
}
6
$csv_line .='"<br/>';
7
$csv_line;
8
}
Una volta lanciato ed eseguito lo script dal Browser (es.: http://localhost/txt2csv.php ), per creare il nuovo file di testo, basterà sempre da Browser salvare l'output creato:
File > Salva con nome > "fornitori.csv"
Fatto!!!
Lo script ovviamente può essere migliorato per passare via query string il nome del file da processare. Può anche essere un'idea creare una form dove selezionare il file attraverso una finestra di dialogo... A voi la scelta!
Comunque sia, già così fa il suo dovere... Ora il file txt convertito in formato CSV è pronto per essere utilizzato o importato in Excel o qualsivoglia programma per poterne manipolare i dati!