20538
Commento:
|
20538
converted to 1.6 markup
|
Le cancellazioni sono segnalate in questo modo. | Le aggiunte sono segnalate in questo modo. |
Linea 2: | Linea 2: |
[[BR]] [[Indice]] |
<<BR>> <<Indice>> |
Linea 9: | Linea 9: |
Un '''DB''' è uno spazio dell'HD dove vengono conservate in appositi contenitori le informazioni che poi dovranno essere fornite al momento che verranno richieste dall'utente. IL '''DB''' vero e proprio è il primo contenitore che noi individuiamo con un nome esattamente come si fa per una '''Directory o cartella'''; al suo interno trovano posto alcune '''Tabelle o file''' con un loro preciso nome e una estensione che nel nostro caso sarà '''txt'''. [[BR]] Facciamo un esempio: [[BR]] il nome del '''DB''' sarà '''Roma''' [[BR]] il nome delle '''Tabelle''' sarà ''' 1) Strurub.txt 2)Rubrica.txt '''[[BR]] Mentre per il '''DB''' non c'è nulla da dire se non che è esattamente una '''Directory o cartella''' con le medesime regole.[[BR]] |
Un '''DB''' è uno spazio dell'HD dove vengono conservate in appositi contenitori le informazioni che poi dovranno essere fornite al momento che verranno richieste dall'utente. IL '''DB''' vero e proprio è il primo contenitore che noi individuiamo con un nome esattamente come si fa per una '''Directory o cartella'''; al suo interno trovano posto alcune '''Tabelle o file''' con un loro preciso nome e una estensione che nel nostro caso sarà '''txt'''. <<BR>> Facciamo un esempio: <<BR>> il nome del '''DB''' sarà '''Roma''' <<BR>> il nome delle '''Tabelle''' sarà ''' 1) Strurub.txt 2)Rubrica.txt '''<<BR>> Mentre per il '''DB''' non c'è nulla da dire se non che è esattamente una '''Directory o cartella''' con le medesime regole.<<BR>> |
Linea 23: | Linea 23: |
'''Cognome, Nome, Indirizzo, Cap, Citta, Prov, Tel Fisso, Tel Mobile o Cell1, Cell2 '''.[[BR]] | '''Cognome, Nome, Indirizzo, Cap, Citta, Prov, Tel Fisso, Tel Mobile o Cell1, Cell2 '''.<<BR>> |
Linea 26: | Linea 26: |
Per quanto sopra la '''Tabella Rubrica.txt ''' conterrà: [[BR]] Id_record: '''0101'''[[BR]] Cognome: '''Rossi''' [[BR]] Nome: '''Natale'''[[BR]] Indirizzo: '''Via della Vittoria 35'''[[BR]] Cap: '''20100'''[[BR]] Città: '''Barletta'''[[BR]] Prov: '''Ba'''[[BR]] Tel_Fisso: '''0567232417'''[[BR]] 1_Cell: '''3283525716'''[[BR]] 2_Cell: '''3384037936''' [[BR]] |
Per quanto sopra la '''Tabella Rubrica.txt ''' conterrà: <<BR>> Id_record: '''0101'''<<BR>> Cognome: '''Rossi''' <<BR>> Nome: '''Natale'''<<BR>> Indirizzo: '''Via della Vittoria 35'''<<BR>> Cap: '''20100'''<<BR>> Città: '''Barletta'''<<BR>> Prov: '''Ba'''<<BR>> Tel_Fisso: '''0567232417'''<<BR>> 1_Cell: '''3283525716'''<<BR>> 2_Cell: '''3384037936''' <<BR>> |
Linea 41: | Linea 41: |
ciò ha un duplice inconveniente la lunghezza della riga varia in continuazione come pure l'ampiezza di ogni singola cella e ciò dipende dalle informazioni che andranno a contenere.[[BR]] | ciò ha un duplice inconveniente la lunghezza della riga varia in continuazione come pure l'ampiezza di ogni singola cella e ciò dipende dalle informazioni che andranno a contenere.<<BR>> |
Linea 43: | Linea 43: |
e l'ampiezza delle colonne; aggiungiamo due informazioni in più e cioe:il tipo di dato inserito (alfanumerico, numerico logico,data, nel caso di dato numerico aggiungiamo il numero delle cifre decimali compreso la virgola separatrice e per ogni dato inserito indichiamone anche la lunghezza in caratteri [[BR]] Qua sotto abbiamo riassunto un po tutto:[[BR]] Id_record: '''4 caratteri di tipo alfanumerico '''[[BR]] Cognome: '''20 caratteri di tipo alfanumerico''' [[BR]] Nome: '''20 caratteri di tipo alfanumerico '''[[BR]] Indirizzo: '''40 caratteri di tipo alfanumerico''' [[BR]] Cap: '''5 caratteri di tipo alfanumerico''' [[BR]] Città: '''20 caratteri di tipo alfanumerico ''' [[BR]] Prov: '''2 caratteri di tipo alfanumerico''' [[BR]] Tel_Fisso: '''14 caratteri di tipo alfanumerico''' [[BR]] 1_Cell: '''12 caratteri di tipo alfanumerico'''[[BR]] #2_Cell: ''' 12 caratteri di tipo alfanumerico'''[[BR]] Abbiamo cosi disposto che le celle avranno in qualunque riga la stessa ampiezza, o meglio metteranno a disposizione per contenere le informazioni sempre gli stessi spazi ma nella immissione delle informazioni alcune celle saranno completamente piene altre no.[[BR]] Per esempio le celle intestate con Id_record saranno sempre piene con uno dei valori compresi tra '''0000''' e '''9999''' e cosi pure saranno piene le celle che conterranno i valori del Cap e della Prov. Le altre, invece, saranno riempite con le infermazioni che noi immetteremo: per esempio a Cognome potremmo immettere '''Rossi''' che occupa solo 5 caratteri oppure a Nome ''' Marcello''' che occupa solo 8 caratteri. [[BR]] |
e l'ampiezza delle colonne; aggiungiamo due informazioni in più e cioe:il tipo di dato inserito (alfanumerico, numerico logico,data, nel caso di dato numerico aggiungiamo il numero delle cifre decimali compreso la virgola separatrice e per ogni dato inserito indichiamone anche la lunghezza in caratteri <<BR>> Qua sotto abbiamo riassunto un po tutto:<<BR>> Id_record: '''4 caratteri di tipo alfanumerico '''<<BR>> Cognome: '''20 caratteri di tipo alfanumerico''' <<BR>> Nome: '''20 caratteri di tipo alfanumerico '''<<BR>> Indirizzo: '''40 caratteri di tipo alfanumerico''' <<BR>> Cap: '''5 caratteri di tipo alfanumerico''' <<BR>> Città: '''20 caratteri di tipo alfanumerico ''' <<BR>> Prov: '''2 caratteri di tipo alfanumerico''' <<BR>> Tel_Fisso: '''14 caratteri di tipo alfanumerico''' <<BR>> 1_Cell: '''12 caratteri di tipo alfanumerico'''<<BR>> #2_Cell: ''' 12 caratteri di tipo alfanumerico'''<<BR>> Abbiamo cosi disposto che le celle avranno in qualunque riga la stessa ampiezza, o meglio metteranno a disposizione per contenere le informazioni sempre gli stessi spazi ma nella immissione delle informazioni alcune celle saranno completamente piene altre no.<<BR>> Per esempio le celle intestate con Id_record saranno sempre piene con uno dei valori compresi tra '''0000''' e '''9999''' e cosi pure saranno piene le celle che conterranno i valori del Cap e della Prov. Le altre, invece, saranno riempite con le infermazioni che noi immetteremo: per esempio a Cognome potremmo immettere '''Rossi''' che occupa solo 5 caratteri oppure a Nome ''' Marcello''' che occupa solo 8 caratteri. <<BR>> |
Linea 61: | Linea 61: |
In questo modo abbiamo progettato la tabella in cui le righe avranno lunghezza pari a tutte le ampiezze + tutti i separatori di cella piu il fine riga e cioe 149 +10+2 = 161[[BR]] | In questo modo abbiamo progettato la tabella in cui le righe avranno lunghezza pari a tutte le ampiezze + tutti i separatori di cella piu il fine riga e cioe 149 +10+2 = 161<<BR>> |
Linea 65: | Linea 65: |
Abbiamo completato cosi il progetto della tabella '''Rubrica.txt''' ma per fare in modo di non dimenticarlo questo progetto lo memorizzeremo nella tabella '''Strurub.txt''' Strurub sta per Struttura Rubrica.[[BR]] Ora progettiamo con le stesse regole '''Strurub.txt'''[[BR]] Id_record: ''' 4 caratteri alfanumerici'''[[BR]] Nome_colonna: '''20 caratteri alfanumerici '''[[BR]] Tipo dell'informazione:' '' 1 carattere alafanumerico''' [[BR]] ''''''potrà contenere '''''' '''A''' per alfanumerico '''N''' per numerico,[ in questo caso nella lunghezza saranno compresi anche i decimali]; vediamo poi meglio nell'esempio qui sotto.[[BR]] Riepilogando e facendo riferimento al progetto della tabella rubrica, la nostra tabella '''Strurub.txt''' conterrà i seguenti dati:[[BR]] Id_record: '''0000''' come per gli indici degli array il primo elemento ha valore 0 [[BR]] |
Abbiamo completato cosi il progetto della tabella '''Rubrica.txt''' ma per fare in modo di non dimenticarlo questo progetto lo memorizzeremo nella tabella '''Strurub.txt''' Strurub sta per Struttura Rubrica.<<BR>> Ora progettiamo con le stesse regole '''Strurub.txt'''<<BR>> Id_record: ''' 4 caratteri alfanumerici'''<<BR>> Nome_colonna: '''20 caratteri alfanumerici '''<<BR>> Tipo dell'informazione:' '' 1 carattere alafanumerico''' <<BR>> ''''''potrà contenere '''''' '''A''' per alfanumerico '''N''' per numerico,[ in questo caso nella lunghezza saranno compresi anche i decimali]; vediamo poi meglio nell'esempio qui sotto.<<BR>> Riepilogando e facendo riferimento al progetto della tabella rubrica, la nostra tabella '''Strurub.txt''' conterrà i seguenti dati:<<BR>> Id_record: '''0000''' come per gli indici degli array il primo elemento ha valore 0 <<BR>> |
Linea 75: | Linea 75: |
tipo: '''A''' [[BR]] Ora la tabella '''Strurub.txt''' conterrà :[[BR]] |
tipo: '''A''' <<BR>> Ora la tabella '''Strurub.txt''' conterrà :<<BR>> |
Linea 91: | Linea 91: |
i decimali cosa che per i numeri telefonici non esiste.[[BR]] | i decimali cosa che per i numeri telefonici non esiste.<<BR>> |
Linea 94: | Linea 94: |
per questioni di spazio metterò i dati su due righe ma voi immaginateli sulla stessa riga come appaiono nella tabella realmente[[BR]] | per questioni di spazio metterò i dati su due righe ma voi immaginateli sulla stessa riga come appaiono nella tabella realmente<<BR>> |
Linea 108: | Linea 108: |
In Python ma anche in altri linguaggi esitono delle funzioni che consentono la gestione dei file [[BR]] 1) creazione di file file(nomefile.txt,modo) [[BR]] 2) apertura di un file esistene open(nomefile.txt,modo) [[BR]] 3) legge il file read()[[BR]] 4) scrive nel file write(str)[[BR]] 5) chiude il file close() [[BR]] queste sono alcune istruzioni in codice python che saranno inserite nel programma vero e proprio più sotto[[BR]] f= file('Rubrica.txt','w') #crea un file di testo nella directory corrente[[BR]] f= open(('Rubrica.txt','w') # è equivalente alla riga precedente[[BR]] f.write(str) # prima di scrivere cancella tutto quello che eventalemnte era presente [[BR]] #str contiene le informazioni da inserire [[BR]] stiamo preparando la tabella Strurub le cui informazioni dovrebbero essere le seguenti[[BR]] |
In Python ma anche in altri linguaggi esitono delle funzioni che consentono la gestione dei file <<BR>> 1) creazione di file file(nomefile.txt,modo) <<BR>> 2) apertura di un file esistene open(nomefile.txt,modo) <<BR>> 3) legge il file read()<<BR>> 4) scrive nel file write(str)<<BR>> 5) chiude il file close() <<BR>> queste sono alcune istruzioni in codice python che saranno inserite nel programma vero e proprio più sotto<<BR>> f= file('Rubrica.txt','w') #crea un file di testo nella directory corrente<<BR>> f= open(('Rubrica.txt','w') # è equivalente alla riga precedente<<BR>> f.write(str) # prima di scrivere cancella tutto quello che eventalemnte era presente <<BR>> #str contiene le informazioni da inserire <<BR>> stiamo preparando la tabella Strurub le cui informazioni dovrebbero essere le seguenti<<BR>> |
Linea 128: | Linea 128: |
ricordo la lunghezza di ciascuna colonna nella tabella Strurub.[[BR]] 1 colonna 4 caratteri e non occorre il carattere di riempimento[[BR]] 2 colonna 20 caratteri e qui occorre il carattere [$][[BR]] 3 colonna 2 caratteri e qui occore il carattere [$] solo per valore inferiori a 10[[BR]] 4 colonna 1 carattere e non occorre il [$][[BR]] 5 colonna 1 carattere presente solo se il tipo di dato della colonna precedente sarà di tipo numerico [[BR]] |
ricordo la lunghezza di ciascuna colonna nella tabella Strurub.<<BR>> 1 colonna 4 caratteri e non occorre il carattere di riempimento<<BR>> 2 colonna 20 caratteri e qui occorre il carattere [$]<<BR>> 3 colonna 2 caratteri e qui occore il carattere [$] solo per valore inferiori a 10<<BR>> 4 colonna 1 carattere e non occorre il [$]<<BR>> 5 colonna 1 carattere presente solo se il tipo di dato della colonna precedente sarà di tipo numerico <<BR>> |
Linea 136: | Linea 136: |
#! /usr/bin/env/python [[BR]] questa istruzione sotto linux fa partire l'interprete sotto windows è un semplice commento[[BR]] #! /usr/bin/python [[BR]] questa istruzione sotto (linux ) '''UBUNTU''' fa partire l'interprete, sotto windows è un semplice commento[[BR]] |
#! /usr/bin/env/python <<BR>> questa istruzione sotto linux fa partire l'interprete sotto windows è un semplice commento<<BR>> #! /usr/bin/python <<BR>> questa istruzione sotto (linux ) '''UBUNTU''' fa partire l'interprete, sotto windows è un semplice commento<<BR>> |
Capitolo 1
Che cosa è un '''DataBase'''
Un DB è uno spazio dell'HD dove vengono conservate in appositi contenitori le informazioni che poi dovranno essere fornite al momento che verranno richieste dall'utente. IL DB vero e proprio è il primo contenitore che noi individuiamo con un nome esattamente come si fa per una Directory o cartella; al suo interno trovano posto alcune Tabelle o file con un loro preciso nome e una estensione che nel nostro caso sarà txt.
Facciamo un esempio:
il nome del DB sarà Roma
il nome delle Tabelle sarà 1) Strurub.txt 2)Rubrica.txt
Mentre per il DB non c'è nulla da dire se non che è esattamente una Directory o cartella con le medesime regole.
Per le Tabelle o file vediamo come inserire le informazioni per poterle riprendere in maniera altrettanto semplice e facile: vediamo una Tabella esempio
Tabella esempio
pensiamo ad un foglio composto di righe e colonne simile ad un foglio di excel :
le colonne saranno intestate, qui a solo titolo di esempio, per comprenderene la necessità di dimensionarle in funzione dei dati che dovono contenere. Le righe invece conterranno tutte le informazioni inerenti una persona.
Per memoria ricordo che stiamo costruendo una tabella che dovrà fungere da rubrica telefonica e che dovrà contenere:
Cognome, Nome, Indirizzo, Cap, Citta, Prov, Tel Fisso, Tel Mobile o Cell1, Cell2 .
Per distinguere una riga da un' altra useremo un codice composto da 4 caratteri numerici (es 0001, 0100, 8500 sono tutti identificativi di riga possibili).Il più alto Identificativo sarà 9999, il piu basso sarà 0000; vanno considerati come stringhe o caratteri alfanumerici anche se appaiono come cifre.
Per quanto sopra la Tabella Rubrica.txt conterrà:
Id_record: 0101
Cognome: Rossi
Nome: Natale
Indirizzo: Via della Vittoria 35
Cap: 20100
Città: Barletta
Prov: Ba
Tel_Fisso: 0567232417
1_Cell: 3283525716
2_Cell: 3384037936
Queste informazioni che qui sono messe una di seguito all'altra, su disco, nel file di testo, vengono memorizzate una accanto all'altra; ciò ha un duplice inconveniente la lunghezza della riga varia in continuazione come pure l'ampiezza di ogni singola cella e ciò dipende dalle informazioni che andranno a contenere.
Per eliminare questi inconvenienti riprogettiamo la nostra tabella in modo da avere costanti la lunghezza delle righe e l'ampiezza delle colonne; aggiungiamo due informazioni in più e cioe:il tipo di dato inserito (alfanumerico, numerico logico,data, nel caso di dato numerico aggiungiamo il numero delle cifre decimali compreso la virgola separatrice e per ogni dato inserito indichiamone anche la lunghezza in caratteri
Qua sotto abbiamo riassunto un po tutto:
Id_record: 4 caratteri di tipo alfanumerico
Cognome: 20 caratteri di tipo alfanumerico
Nome: 20 caratteri di tipo alfanumerico
Indirizzo: 40 caratteri di tipo alfanumerico
Cap: 5 caratteri di tipo alfanumerico
Città: 20 caratteri di tipo alfanumerico
Prov: 2 caratteri di tipo alfanumerico
Tel_Fisso: 14 caratteri di tipo alfanumerico
1_Cell: 12 caratteri di tipo alfanumerico
#2_Cell: 12 caratteri di tipo alfanumerico
Abbiamo cosi disposto che le celle avranno in qualunque riga la stessa ampiezza, o meglio metteranno a disposizione per contenere le informazioni sempre gli stessi spazi ma nella immissione delle informazioni alcune celle saranno completamente piene altre no.
Per esempio le celle intestate con Id_record saranno sempre piene con uno dei valori compresi tra 0000 e 9999 e cosi pure saranno piene le celle che conterranno i valori del Cap e della Prov. Le altre, invece, saranno riempite con le infermazioni che noi immetteremo: per esempio a Cognome potremmo immettere Rossi che occupa solo 5 caratteri oppure a Nome Marcello che occupa solo 8 caratteri.
Per riempire tutta la cella possiamo aggiungere il carattere $ che sicuramnente non viene mai usato nelle nostre informazioni perchè non esiste nell'alfabeto sia Italiano che Internazionale, ovviamente ripetuto tante volte quante ne mancano per riempire la cella cosi Cognome conterrà Rossi + $$$$$$$$$$$$$$$$. Aggiungiamo [,] un carattere di separazione delle celle e poi i 2 caratteri [\n] per indicare il fine riga. In questo modo abbiamo progettato la tabella in cui le righe avranno lunghezza pari a tutte le ampiezze + tutti i separatori di cella piu il fine riga e cioe 149 +10+2 = 161
Il separatore va messo anche dopo l'ultima intestazione di colonna e prima dei caratteri di fine riga
Abbiamo completato cosi il progetto della tabella Rubrica.txt ma per fare in modo di non dimenticarlo questo progetto lo memorizzeremo nella tabella Strurub.txt Strurub sta per Struttura Rubrica. Riepilogando e facendo riferimento al progetto della tabella rubrica, la nostra tabella 0000,Id_record$$$$$$$$$$$,4$,A,$,\n 0001,Cognome$$$$$$$$$$$$$,20,A,$,\n 0002,Nome$$$$$$$$$$$$$$$$,20,A,$,\n 0003,Indirizzo$$$$$$$$$$$,40,A,$,\n 0004,Cap$$$$$$$$$$$$$$$$$,5$,A,$,\n 0005,Citta$$$$$$$$$$$$$$$,20,A,$,\n 0006,Prov$$$$$$$$$$$$$$$$,2$,A,$,\n 0007,Tel_Fisso§$$$$$$$$$$,14,N,0,\n 0008,Cell1$$$$$$$$$$$$$$$,12,N,0,\n 0009,Cell2$$$$$$$$$$$$$$$,12,N,0,\n =N.B.= Ho volutamente inserito nella tabella Ora con la stessa logica simuliamo il riempimento della tabella 0000,Rossi$$$$$$$$$$$$$$$,Gerardo$$$$$$$$$$$$$,Via delle favole di Esopo 24$$$$$$$$$$$ 20210,Milano$$$$$$$$$$$$$$,MI,02234567899$$$,3283435711$$,3383435711$$,\n 0001,Bianchi$$$$$$$$$$$$$,Menelao$$$$$$$$$$$$$,Via delle favole di Fedro 88$$$$$$$$$$$ 00158,Roma$$$$$$$$$$$$$$$$,RM,06764567899$$$,3283438812$$,3393537711$$,\n Ed ora non ci resta che studiare e realizzare il programma in python che costruisca le tabelle e le gestisca; vedremo nel prossimo capitolo come.
In Python ma anche in altri linguaggi esitono delle funzioni che consentono la gestione dei file queste sono alcune istruzioni in codice python che saranno inserite nel programma vero e proprio più sotto f= file('Rubrica.txt','w') #crea un file di testo nella directory corrente #str contiene le informazioni da inserire stiamo preparando la tabella Strurub le cui informazioni dovrebbero essere le seguenti ricordo la lunghezza di ciascuna colonna nella tabella Strurub. 1 colonna 4 caratteri e non occorre il carattere di riempimento
#! /usr/bin/env/python #! /usr/bin/python
Per coloro che desiderano provare e verificare l'uso di python con il DB questo secondo programmino deve essere messo nella stessa directory dove metete il precedente con il nome Provatelo e poi fatemi sapere se avete problemi.
Ora progettiamo con le stesse regole Strurub.txt
Id_record: 4 caratteri alfanumerici
Nome_colonna: 20 caratteri alfanumerici
Tipo dell'informazione:' 1 carattere alafanumerico
potrà contenere A per alfanumerico N per numerico,[ in questo caso nella lunghezza saranno compresi anche i decimali]; vediamo poi meglio nell'esempio qui sotto.
Id_record: 0000 come per gli indici degli array il primo elemento ha valore 0
Nome Colonna: "Id_Record" Lunghezza: 20 tipo: A
Ora la tabella Strurub.txt conterrà :
Capitolo 2
Gestione file di testo
1) creazione di file file(nomefile.txt,modo)
2) apertura di un file esistene open(nomefile.txt,modo)
3) legge il file read()
4) scrive nel file write(str)
5) chiude il file close()
f= open(('Rubrica.txt','w') # è equivalente alla riga precedente
f.write(str) # prima di scrivere cancella tutto quello che eventalemnte era presente
Id_rec,Nome Colonna, lunghezza in car,tipo del dato,decimali,
0000,Id_record , 4 ,A , § ,
ma per rendere la riga sempre costante per tutto il file è necessario:
2 colonna 20 caratteri e qui occorre il carattere [$]
3 colonna 2 caratteri e qui occore il carattere [$] solo per valore inferiori a 10
4 colonna 1 carattere e non occorre il [$]
5 colonna 1 carattere presente solo se il tipo di dato della colonna precedente sarà di tipo numerico
Codice Python
questa istruzione sotto linux fa partire l'interprete sotto windows è un semplice commento
questa istruzione sotto (linux )
# scriviamo ora il codice vero e proprio
#! /usr/bin/python
"""
programma per la costruzione e riempimento della tabella di struttura Strurub.txt
nome del file costrutabstru.py . [Il nome del file in maniera concisa dice cosa fara il file] [[BR]]
realizzato da Antonio CHESSA il 26/08/2006
"""
import os,sys
def normalizza(dato,quanti):
a = quanti- len(dato)
riempe ='$'
dato = dato +(riempe*a)
return dato
# programma principale
colonomi= ['Id_record','Campo','Lungo','Tipo','Decimali'] # sono i nomi delle colonne
colonume= [4,20,2,1,1] # sono le ampiezze delle colonne
sepa = ',' # carattere separatore di colonne
fineriga ='\n' # caratteri di fine riga
riga= ''
j = 1
f =open('Strurub.txt','a') # il parametro 'a' consente la scrittura [f.vrite(str)] aggiungendo il parametro
# '''str''' inga alla fine del file
k= 1
while k < 2:
for i in range(len(colonomi)):
while j < 2:#
valore = raw_input ('[inserisci '+ colonomi[i]+ "] " )
if len(valore) > colonume[i]:
print 'valore errato; Inseriscilo nuovamente'
continue
else:
break
if len(valore)< colonume[i]:
valore = normalizza(valore,colonume[i])
print "Valore =",valore
if valore == "0" or valore == '':
valore = '$'
riga = riga +valore+','
print riga
riga =riga +fineriga
f.write(riga)
riga = ''
si = raw_input( "Hai finito di inserire la struttura della tabella rubrica? " )
if si == "S" or si == 's':
break
print "La tabella Strurub è stata completata"
--------
##ATTENZIONE inseriamo con molto piacere una versione piu elegante rispetto a quella proposta, suggerita da
''' gennaro ''' del forum gruppo programmazione
#! /usr/bin/python
from re import match
colonomi = ['Id_record','Campo','Lungo','Tipo','Decimali']
colonume = [4,20,2,1,1]
sepa = ','
fineriga = '\n'
riempe = '$'
riga = ''
strutab = open('Strurub.txt','a')
def normalizza(dato,quanti):
if match("^[0-9]+$",dato)!=None:
dato=dato.zfill(quanti)
else:
a = quanti- len(dato)
dato = dato +(riempe*a)
return dato
# programma principale
while True:
for i,v in enumerate(colonomi):
while True:
valore = raw_input ('inserisci '+ v + " ")
if len(valore)<=colonume[i]:
valore = normalizza(valore,colonume[i])
if valore == '' : valore = riempie
print "Valore = ",valore
break
else:
print 'valore errato; Inseriscilo nuovamente'
continue
riga+=valore+sepa
strutab.write(riga+fineriga)
riga=""
si = raw_input("Hai finito di inserire la struttura della tabella rubrica? ")
if si in ["s",'S',"si","Si","SI"]:
strutab.close()
break
print "La tabella Strurub e' stata completata"
#--------------- fine dello script -----------------------
#se consultate la tabella Strurub con un editor qualsiasi vedrete quanto segue:
0000,Id_record$$$$$$$$$$$,4$,A,$,
0001,Cognome$$$$$$$$$$$$$,20,A,$,
0002,Nome$$$$$$$$$$$$$$$$,20,A,$,
0003,Indirizzo$$$$$$$$$$$,40,A,$,
0004,Cap$$$$$$$$$$$$$$$$$,5$,A,$,
0005,Citta$$$$$$$$$$$$$$$,20,A,$,
0006,Provincia$$$$$$$$$$$,2$,A,$,
0007,Tel_fisso$$$$$$$$$$$,14,A,$,
0008,Cell1$$$$$$$$$$$$$$$,12,A,$,
0009,Cell2$$$$$$$$$$$$$$$,12,A,$,
0gni riga è lunga 35 caratteri ed e composta da 4+20+2+1+1 +5[separatori] che vedete e 2 che non si vedono '\n'
ora dobbiamo realizzare la tabella Rubrica la cui struttura sta nella tabella Strurub.txt
Capitolo 3
Preparazione della Tabella Rubrica.txt e inserimento dati
codice in Python
"""
programma per la creazione e gestione della tabella Rubrica.txt
nome del programma gestiorubri.py
realizzato da Antonio CHESSA il 27/08/2006
"""
import os,sys
import string
def leggotabstru(tab,modo):
f=open(tab,modo)
i = 0
valori= []
tuttidati=[]
while i<1:
riga =f.readline()
if not riga:
f.close()
break
#metto le informazioni separate da virgole in un array
# ma prima lo libero dei caratteri di fine riga
riga = riga[:-2]
lista = string.split(riga ,sep = ",")
#tolgo da ogni elemnto di riga i caratteri di riempimento
valori = elimiriempi(lista)
#print'valori =',valori
tuttidati.append(valori)
return tuttidati
def elimiriempi(lista):
valore =[]
valpul =""
j = 0
#print " len(lista) =",len(lista)
while j < len(lista):
#j =string.find(lista[j],"&")
valpul =string.rstrip(lista[j], "$")
#print "valpul = ",valpul
valore.append(valpul)
valpul =""
j=j+1
#print " j = ",j
return valore
def creorubri():
tab = 'Rubrica.txt'
dir = os.getcwd( )
lista = os.listdir(dir)
if not tab in lista:
f =file(tab,'w')
file.close(f)
print "creata la tabella ",tab
else:
print "la Tabella "+tab +" già esiste "
return(tab)
def normalizza(dato,quanti):
a = int(quanti)- len(dato)
riempe ='$'
dato = dato +(riempe*a)
return dato
#programma principale
# creo tabella Rubrica.txt
tab = creorubri()
print tab
# prendo informazioni da Strurub per gestire l'input dati in Rubrica
# riga e' un array
# riga[1] = Nome del campo
# riga [2]= lunghezza del campo
# riga[3] = tipo del campo
# riga[4] = decimali se numerico
riga =[]
tab = "Strurub.txt"
riga= leggotabstru(tab,'r+')
#print 'riga ',riga
#print
nuariga =''
sepa =','
fineriga = '\n'
# preparo per l'input da memorizzare in Rubrica.txt
tab ='Rubrica.txt'
f= open(tab,'a')
k = 0
while k<1:
for i in range(len(riga)):
j=0
while j < 1:
etica = riga[i][1]
lungo = riga[i][2]
tipo = riga[i][3]
varia = raw_input( etica+ " [max "+lungo +" car tipo "+tipo+ "] " )
si = raw_input ("Dato esatto? conferma con S ")
if si =="S" or si =="s":
# deve aggiungere il carattere di riempimento ecc e poi lo può scrivere sulla rubrica
if i > 0:
varia = normalizza(varia,lungo)
nuariga = nuariga+varia+sepa
break
nuariga =nuariga+fineriga
print 'nuariga =',nuariga
f.write(nuariga)
si =raw_input ("Nuovi dati da immettere in rubrica? conferma con S ")
if si =="S" or si =="s":
continue
else:
break
f.close()
Capitolo 4
import os,sys
import funzioni
import MySQLdb
def esamina(qry):
print 'la qry era =',qry
val = funzioni.eseguiquery(qry)
print 'val =',val
# valori restituiti da varie query
doma =[]
doma.append( "CREATE DATABASE Paolo")
doma.append( "SHOW DATABASES")
doma.append( "USE Paolo")
doma.append( "CREATE TABLE pippo (cognome VARCHAR(20),nome VARCHAR(20))")
doma.append( "SHOW TABLES ")
doma.append( "DESCRIBE pippo")
doma.append( "Insert into pippo (cognome,nome) values ('Piccolini','Gennarino')")
doma.append( "SELECT * from pippo")
doma.append( "UPDATE pippo set cognome = 'Grandetti',nome ='Luigino'")
doma.append( "SELECT * from pippo")
doma.append( "DROP DATABASE Paolo")
for i in range (len(doma)):
qry = doma[i]
esamina(qry)
a= raw_input("batti un tasto " )
import os,sys
import MySQLdb
import string
host="" #IP del server MySQL
user="root" #Nome utente
passwd="vosra password" # inserite la vs Password
db="" # il nome della dir che contiene la tabella oggetto della query per la prova non occorre
try:
s = MySQLdb.connect(host=host,user=user,passwd=passwd,db=db)
cur = s.cursor()
print "connessione avvenuta "
except:
print "sono qui e la connessione non e' riuscita "
avviso = "Si e' verificato un errore durante la connessione al DB "+db
print avviso
def eseguiquery(qry):
try:
cur.execute(qry)
rec = cur.fetchall()
if "UPDATE" in qry or "INSERT" in qry:
rec = "OK"
return rec
except:
avviso = "Si e' verificato un errore durante la query "+qry
print avviso
try:
#msg.ShowModal()
rec="ERRORE"
return rec
finally:
#msg.Destroy()
pass
def leggestrutab(qry):
try:
print "sono qui in funzioni"
cur.execute(qry)
rec = cur.fetchall()
print "rec =",rec
print "preparo struttura"
nome = ""
tipo = ""
lungo = ""
stru1 = []
stru2 = []
print "len(rec)",len(rec)
for i in range( len(rec)):
print str(i)+ " "+str(rec[i][0])+" "+str( rec[i][1])
nome=(str(rec[i][0]))
n= string.index(str(rec[i][1]),"(")
tipo=((str(rec[i][1]))[0:n])
lungo=((str(rec[i][1]))[n+1:-1])
stru1.append(nome)
stru1.append(tipo)
stru1.append(lungo)
stru2.append(stru1)
stru1=[]
print "stru2 ",stru2
return stru2
except:
avviso = "Si e' verificato un errore controlla la query "+qry
#msg = wx.MessageBox( avviso, 'Avviso',wxOK | wxICON_ERROR)
print avviso
try:
rec="ERRORE"
return rec
finally:
return rec