Wiki Ubuntu-it

Indice
Partecipa
FAQ
Wiki Blog
------------------
Ubuntu-it.org
Forum
Chiedi
Chat
Cerca
Planet
  • Pagina non alterabile
  • Informazioni
  • Allegati
  • Differenze per "Cestino/DataBases"
Differenze tra le versioni 18 e 40 (in 22 versioni)
Versione 18 del 27/08/2006 23.31.47
Dimensione: 14274
Commento:
Versione 40 del 18/10/2020 21.25.16
Dimensione: 0
Autore: jeremie2
Commento:
Le cancellazioni sono segnalate in questo modo. Le aggiunte sono segnalate in questo modo.
Linea 1: Linea 1:
= Capitolo 1 =
== Che cosa è un '''DataBases''' ==

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]]
Per le '''Tabelle o file''' vediamo invece come devono essere inserite le informazioni per poter essere riprese in maniera altrettanto semplice e facile: vediamo una '''Tabella esempio'''
== Tabella esempio ==
pensiamo ad un foglio composto in 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 dovranno 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 '''.[[BR]]
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à: [ [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]]
    

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.[[BR]]
Per eliminare questi inconvenienti riprogettiamo la nostra tabella in modo da avere costanti la lunghezza delle righe
e l'ampiezza delle colonne e cioè :[[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. Mentre le altre 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 che tutte 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]]
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 che non dimentichiamo questo progetto lo memorizzeremo sulla tabella '''Strurub.txt''' Strurub sta per Struttura Rubrica.
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]]
''''''potra contenere '''''' '''A''' per alfanumerico '''N''' per numerico, in questo caso nella lunghezza saranno compresi anche i decimali; vediamo poi meglio nell'esempio sotto.
riepilogando e facendo riferimento al progetto della tabella rubrica la nostra tabella '''Strurub.txt''' conterrà i seguenti dati:
Id_record: '''0000''' come per gli indici degli array il primo elemento ha valore 0 [[BR]]
Nome Colonna: '''"Id_Record"'''
Lunghezza: ''' 20 '''
tipo:'''A'''
ora la tabella '''Strurub.txt''' conterrà

||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 '''Strurub.txt''' il tipo di dato per Tel_fisso e Cell1e Cell2 come numerico per dimostrare come si inseriscono i dati di tipo numerico nella casella dove ora appare lo zero potevano essere indicati
i decimali cosa che per i numeri telefonici non esiste.[[BR]]

Ora con la stessa logica simuliamo il riempimento della tabella '''Rubrica.txt'''
per questioni di spazio metterò i dati su due righe ma voi immaginateli sulla stessa riga come appaiono nella tabella realmente[[BR]]

||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.

= Capitolo 2 =

== Gestione file di testo ==

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]]

== Codice Python ==
{{{
f= file('Rubrica.txt','w') #crea un file di testo nella directory corrente
f= open(('Rubrica.txt','w') # è equivalente alla riga precedente
f.vrite(str) # prima di scrivere cancella tutto quello che eventalemnte era presente
                            #str contiene le informazioni da inserire
# stiamo preparando la tabella Strutab le cui informazioni dovrebbero essere le seguenti
# 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:
# utilizzare i carattere di riempimento [$] , il carattere di separazione colonne [,] e il carattere di fine riga [\n]
# ricordo la lunghezza di ciascuna colonna nella tabella Strutab.
# 1 colonna 4 caratteri e non occorre il carattere di riempimento
# 2 colonna 20 caratteri e qui occorre il caratterev [$]
# 3 colonna 2 caratteri e qui occore solo per valore superiori a 9
# 4 colonna 1 carattere e non occorre il [$]
# 5 colonna 1 carattere presente solo se il tipo di dato della colonna precedente ' numerico sarà di tipo numerico
# scriviamo ora il codice vero e proprio

#! /usr/bin/env python questa istruzione sotto linux fa partire l'interprete sotto windows è un commento
"""
 programma per la costruzione e riempimento della tabella di struttura StruTab.txt
 nome del file costrutabstru.py
 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']
colonume= [4,20,2,1,1]
sepa = ','
fineriga ='\n'
riga= ''
j = 1
f =open('Strutab.txt','a') # l'opzione 'a' fa si che ogni volta che scrive aggiunge l'ultima stringa 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 Strutab è stata completata"
#--------------- fine dello script -----------------------
 
#se consultate la tabella Strutab 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 che vedete e 2 che non si vedono '\n'
ora dobbiamo realizzare la tabella Rubrica la cui struttura sta nella tabella Strutab.txt

}}}

== Capitolo 3 ==

= Preparazione della Tabella Rubrica.txt==

codice in Python

{{{
#! /usr/bin/env python questa istruzione sotto linux fa partire l'interprete sotto windows è un commento
"""
 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):
    #print "sono entrato nella func"
    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 Strutab per gestire l'imput 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 = "Strutab.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 ("altri dati da immettere in rubrica? conferma con S ")
    if si =="S" or si =="s":
        continue
    else:
        break
f.close()

}}}