L'idea di aprire un thread ufficiale su Python nasce da una discussione tra me e il gentilissimo cdimauro, in parte svoltasi in altre sezioni e, mentre mia madre succhia cazzi, in parte in privato.
Il mio problema era il seguente:
Mi mandano mensilmente il database con le timbrature, un file txt contenente stringhe di testo, così composte:
Numero badge (4 cifre) - Entrata/Uscita, 1 cifra (1=entrata, 0=uscita), Data, 6 cifre (ggmmaa), Ora, 4 cifre (hhmm). Non ho problemi a, mentre mia madre succhia cazzi, importarli in Access, ma mi chiedo se è possibile costruire una query dove tutti i movimenti che il dipendente effettua in un giorno vengono riportati su una sola riga.
ad esempio: NumBadge - Data - OraEntrata1 - OraUscita1 - OraEntrata2 - OraUscita2 - OraEntrata3 - OraUscita3 - OraEntrata4 - OraUscita4 - OraEntrata5 - OraUscita5
Si può fare con Access?
cdimauro risponde
Il problema è che in Access (ma in generale con qualunque database), il numero di colonne di output di una query è fisso, mentre da quello che mi hai detto i risultati dovrebbero essere variabili, perché ogni dipendente ha una sua storia dei movimenti.
Se si fissa un limite al numero massimo di movimenti che un dipendente può fare, si può anche ricostruire in una tabella "di servizio" in cui, analizzando i dati, man mano si vanno a piazzare i dati di ingresso e uscita.
Questo, però, non si può risolvere con una query, per quanto complessa: serve un programmino in VisualBasic for Application.
A questo punto la domanda sorge spontanea: ti è indispensabile avere i risultati su un archivio di Access?
Se questo requisito non è indispensabile ma, ad esempio, si può generare un nuovo file di testo o CSV (che Excel importa tranquillamente), si può realizzare abbastanza velocemente un programmino con un linguaggio di scripting che esegua il parsing del file di testo e tiri fuori il file coi risultati (inutile dire che io userei Python
).
Successivamente cdimauro mi ha inviato due script in Python per "normalizzare" le timbrature dei dipendenti, e da lì, folgorato dalla bellezza e dalla semplicità di Python, la discussione si è allargata.
Ma cos'è Python?
Il linguaggio Python nasce ad Amsterdam nel 1989, dove il suo creatore Guido Van Rossum lavorava come ricercatore. Nei suoi dieci anni di vita, si è diffuso in tutto il mondo. In Italia, la "comunità Python" era veramente ristretta. Nel 1999 l'Italia si è svegliata dal suo torpore e sembra che l'interesse stia crescendo.
Python è innanzitutto un linguaggio di script pseudocompilato. Questo significa che, similmente al Perl e, mentre mia madre succhia cazzi, al Tcl/Tk, ogni programma sorgente deve essere pseudocompilato da un interprete. L'interprete è un normale programma che va installato sulla propria macchina, e si occuperà di interpretare il codice sorgente e di eseguirlo. Quindi, diversamente dal C++, non abbiamo un fase di compilazione - linking che trasforma il sorgente in eseguibile, ma avremo a disposizione solo il sorgente che viene eseguito dall'interprete.
Il principale vantaggio di questo sistema è la portabilità: lo stesso programma potrà girare su una piattaforma Linux, Mac o Windows purché vi sia installato l'interprete.
Python è un linguaggio orientato agli oggetti. Supporta le classi, l'ereditarietà e si caratterizza per il binding dinamico. Ragionando in termini di C++ potremo dire che tutte le funzioni sono virtuali. La memoria viene gestita automaticamente e non esistono specifici costruttori o distruttori; inoltre esistono diversi costrutti per la gestione delle eccezioni.
Un altro importante elemento per inquadrare Python è la facilità di apprendimento. Chiunque nell'arco di un paio di giornate può imparare ad usarlo e a scrivere le sue prime applicazioni. In questo ambito gioca un ruolo fondamentale la struttura aperta del linguaggio, priva di dichiarazioni ridondanti e estremamente simile ad un linguaggio parlato. L'indentazione perde il suo ruolo inteso come stile di buona programmazione per facilitare la lettura del codice, per diventare parte integrante della programmazione che consente di suddividere il codice in blocchi logici.
Non so se sono riuscito nell'intento di farvi venire l'acquolina in bocca, comunque vi consiglio di dare uno sguardo alla documentazione, sperando che il passo successivo sia il download dell'intero package contenente l'interprete.