Sincronizza Indice |
Scarica il progetto |
Testo dell'articolo |
Stampa l'articolo |
Ho bisogno di scrivere un programmino che, dopo aver analizzato dei files contenenti dei particolari tracciati, estragga dei dati da un foglio di Excel e tramite questi generi dei files di testo con una particolare struttura determinata dal file del tracciato. Per sviluppare questo progetto utilizzeremo il controllo RichTextBoxe DAO 3.5 per accedere al foglio di Excel. Pertanto è necessario selezionare il controllo Microsoft Rich Textbox Control dalla voce Componenti del menu Progetto. È anche necessario inserire un riferimento a Microsoft DAO 3.5 Object Library tramite la voce Riferimenti del menu Progetto. Il progetto si compone di due formsed un modulo standard. Quest'ultimo conterrà due variabili globali, un nuvo tipo di dati di nome TIPOSEZIONE ed alcune funzioni che utilizzeremo parecchie volte all'interno del nostro progetto.
Nei due form invece avremo gli strumenti minimi per definire la struttura del tracciato ed il form principale, molto semplice, per la scelta dei files da utilizzare. Prima di addentrarci nei forms vediamo il contenuto del nostro modulo:
Alla riga 3 definiamo il tipo di dati TIPOSEZIONE. In sostanza una sezione è un segmento del file tracciato con una posizione iniziale e una finale, associato ad un campo del foglio Excel e con dei dati aggiuntivi che stabiliscono se la sezione è fissa o si ripete per ogni record, se la lunghezza è fissa o regolata dall'ampiezza del campo associato. Nel caso sia fissa è necessario definire l'allineamento che i dati devono avere (sinistra o destra) ed il carattere di riempimento per raggiungere la lunghezza desiderata. Così il tipo dati TIPOSEZIONE si compone di 7 campi:
Alle righe 13 e 14 abbiamo definito due variabili globali. La prima è FILEXLS ed indica il database Excel per i dati da estrarre. La seconda variabile è il Recordset FOGLIOXLS che conterrà i dati da estrarre dal database FILEXLS.
Seguono, nel modulo, un paio di funzioni che utilizzeremo più avanti.
La funzione FileEsiste viene spiegata approfonditamente nell'HowTo dedicato alla verifica se un dato file esiste.
La funzione Sezione2Riga serve per trasformare una sezione di tipo TIPOSEZIONE in una stringa. Questo perché le singole sezioni saranno tenute all'interno di una Collection; con Visual Basic 5, tuttavia, non è possibile inserire elementi di tipi definiti dall'utente all'interno di una Collection. A tale scopo, nel momento in cui inseriremo i dati nella Collection convertiremo la sezione in una stringa ed inseriremo quella.
La funzione Sezione2Riga unisce i singoli campi della sezione in una stringa separandoli temite un punto e virgola. Segue un'altra funzione che effettua l'operazione inversa, cioé converte una stringa in una sezione di tipo TIPOSEZIONE.
La funzione effettua la ricerca dei punto e virgola ed inserisce i dati all'interno della sezione passata per riferimento. L'ultima Sub del modulo è OrdinaSezioni e, come dice il
nome stesso, effettua l'ordinamento delle sezioni in base al punto di
inizio della sezione. Il metodo di ordinamento è il classico Bubble sort (ordinamento a bolle), approfondito nella sezione Informazioni aggiuntive.
Alla riga 65 abbiamo dichiarato un'array (matrice) di stringhe di nome ARRAYSEZIONI senza specificare la sua ampiezza. Questo perché vogliamo utilizzare un dimensionamento dinamico effettuato in fase di esecuzione. Infatti abbiamo il primo ridimensionamento alla riga 70 impostando la dimensione della matrice a 5. Alle righe 68 e 69 abbiamo dichiarato due variabili di tipo TIPOSEZIONE. Esse saranno utilizzate per estrarre due valori dalla Collection e confrontarli per l'ordinamento.
Come prima operazione della Sub eseguiamo una copia dei dati della Collection SEZIONI nella matrice ARRAYSEZIONI. Non conoscendo a priori la dimensione della Collection abbiamo voluto effettuare il ridimensionamento della matrice a 5 elementi per volta. Infatti, quando la dimensione dell'array è minore dell'elemento in corso di estrazione, viene incrementata la dimensione dell'array di 5 elementi, preservando il contenuto dell'array. Esistono modi più semplici ed efficienti per effettuare questa operazione, ma abbiamo voluto sfruttare l'occasione per mostrare il funzionamento del dimensionamento dinamico. Alla riga 73 abbiamo l'inserimento dell'elemento dalla Collection alla matrice.
In questo ciclo abbiamo l'operazione di sorting (ordinamento) tramite Bubble sort. L'elemento 0 della matrice serve per effettuare lo scambio dei dati tra due celle dell'array.
Effettuato il sorting sarà necessario rimettere tutti i dati nella Collection in maniera ordinata. Per questo alla riga 87 salviamo la dimensione della Collection nella variabile CONTA2. Avendo messo in salvo la dimensione originale, possiamo tranquillamente
svuotare la Collection (righe 88-90) e poi riempirla nuovamente utilizzando
la dimensione salvata precedentemente (righe 91-93). |
Fibia
FBI
|
Torna all'introduzione delle Richieste dei lettori |