Accueil





Créer et utiliser une base de données avec dict



Nous allons voir comment créer et utiliser une base de données $database, dans laquelle vous pourrez définir des catégories, des sous-catégories, des sous-sous-catégories, (...) et attribuer des valeurs à des entrées.


Syntaxe :
create_entry category1 [category2 [...]] <value>  : Crée une entrée et lui attribue une valeur.

delete_entry category1 [category2 [...]]  : Supprime une entrée.

get_entries category1 [category2 [...]]  : Affiche les entrées que contient une catégorie.

get_data category1 [category2 [...]]  : Affiche la valeur d'une entrée.

incr_value category1 [category2 [...]] <increment>  : Incrémente la valeur d'une entrée. L'incrément peut être une valeur négative et/ou décimale.



Procédures
############################################################################### ### Crée une entrée dans la base de données. ############################################################################### proc create_entry {args} { variable database if { ![::tcl::info::exists database] } { variable database {} } ::tcl::dict::set database {*}$args } ############################################################################### ### Supprime une catégorie et ses sous-catégories dans la base de données. ############################################################################### proc delete_entry {args} { variable database if { ![::tcl::info::exists database] } { return -code error "base de données vide" } elseif { ![::tcl::dict::exists $database {*}$args] } { return -code error "entrée inexistante" } else { if { [catch { ::tcl::dict::unset database {*}$args }] } { return -code error "entrée inexistante" } } } ############################################################################### ### Affiche les entrées que contiennent une catégorie dans la base de données. ############################################################################### proc get_entries {args} { variable database if { ![::tcl::info::exists database] } { return -code error "base de données vide" } else { if { [catch { ::tcl::dict::keys [::tcl::dict::get $database {*}$args] } result ] } { return -code error "catégorie inexistante" } else { return $result } } } ############################################################################### ### Affiche la valeur d'une entrée dans la base de données. ############################################################################### proc get_data {args} { variable database if { ![::tcl::info::exists database] } { return -code error "base de données vide" } else { if { [catch { ::tcl::dict::get $database {*}$args } result] } { return -code error "catégorie inexistante" } else { return $result } } } ############################################################################### ### Incrémente une entrée numérique dans la base de données. ### L'incrément peut être une valeur négative et/ou décimale. ############################################################################### proc incr_value {args} { if { ![::tcl::string::is double [set increment [lindex $args end]]] } { return -code error "l'incrément doit être numérique" } else { set args [lreplace $args end end] variable database if { ![::tcl::info::exists database] } { return -code error "base de données vide" } else { if { ![::tcl::dict::exists $database {*}$args] } { return -code error "entrée inexistante" } elseif { ![::tcl::string::is double [::tcl::dict::get $database {*}$args]] } { return -code error "la valeur de cette entrée n'est pas numérique" } elseif { [catch { ::tcl::dict::set database {*}$args [expr {[::tcl::dict::get $database {*}$args] + $increment}] } result] } { return -code error "catégorie inexistante" } else { return $result } } } }


Utilisation
create_entry France Paris "Toto Dupont" prénom Toto Tcl: France {Paris {{Toto Dupont} {prénom Toto}}}
create_entry France Paris "Toto Dupont" nom Dupont Tcl: France {Paris {{Toto Dupont} {prénom Toto nom Dupont}}}
create_entry France Paris "Toto Dupont" âge 24 Tcl: France {Paris {{Toto Dupont} {prénom Toto nom Dupont âge 24}}}
create_entry France Paris "Titi Durand" prénom Titi Tcl: France {Paris {{Toto Dupont} {prénom Toto nom Dupont âge 24} {Titi Durand} {prénom Titi}}}
create_entry France Paris "Titi Durand" nom Durand Tcl: France {Paris {{Toto Dupont} {prénom Toto nom Dupont âge 24} {Titi Durand} {prénom Durand}}}
create_entry France Paris "Titi Durand" âge 32 Tcl: France {Paris {{Toto Dupont} {prénom Toto nom Dupont âge 24} {Titi Durand} {prénom Durand âge 32}}}
create_entry Espagne Madrid "Pedro Sanchez" prénom Pedro Tcl: France {Paris {{Toto Dupont} {prénom Toto nom Dupont âge 24} {Titi Durand} {prénom Titi âge 32 nom Durand}}} Espagne {Madrid {{Pedro Sanchez} {prénom Pedro}}}
create_entry Espagne Madrid "Pedro Sanchez" nom Sanchez Tcl: France {Paris {{Toto Dupont} {prénom Toto nom Dupont âge 24} {Titi Durand} {prénom Titi âge 32 nom Durand}}} Espagne {Madrid {{Pedro Sanchez} {prénom Pedro nom Sanchez}}}
create_entry Espagne Madrid "Pedro Sanchez" âge 17 Tcl: France {Paris {{Toto Dupont} {prénom Toto nom Dupont âge 24} {Titi Durand} {prénom Titi âge 32 nom Durand}}} Espagne {Madrid {{Pedro Sanchez} {prénom Pedro nom Sanchez âge 17}}}
create_entry France Grenoble "Menz Agitat" prénom Menz Tcl: France {Paris {{Toto Dupont} {prénom Toto nom Dupont âge 24} {Titi Durand} {prénom Titi âge 32 nom Durand}} Grenoble {{Menz Agitat} {prénom Menz}}} Espagne {Madrid {{Pedro Sanchez} {prénom Pedro nom Sanchez âge 17}}}
create_entry France Grenoble "Menz Agitat" nom Agitat Tcl: France {Paris {{Toto Dupont} {prénom Toto nom Dupont âge 24} {Titi Durand} {prénom Titi âge 32 nom Durand}} Grenoble {{Menz Agitat} {prénom Menz nom Agitat}}} Espagne {Madrid {{Pedro Sanchez} {prénom Pedro nom Sanchez âge 17}}}

get_entries Tcl: France Espagne
get_entries France Tcl: Paris Grenoble
get_entries France Paris Tcl: {Toto Dupont} {Titi Durand}
get_entries France Paris "Toto Dupont" Tcl: prénom nom âge

get_data France Paris "Toto Dupont" prénom Tcl: Toto
get_data France Paris "Toto Dupont" nom Tcl: Dupont
get_data France Paris "Toto Dupont" âge Tcl: 24

delete_entry France Grenoble Tcl: France {Paris {{Toto Dupont} {prénom Toto nom Dupont âge 24} {Titi Durand} {prénom Titi âge 32 nom Durand}}} Espagne {Madrid {{Pedro Sanchez} {prénom Pedro nom Sanchez âge 17}}}
delete_entry France Paris "Titi Durand" Tcl: France {Paris {{Toto Dupont} {prénom Toto nom Dupont âge 24}}} Espagne {Madrid {{Pedro Sanchez} {prénom Pedro nom Sanchez âge 17}}}

incr_value France Paris "Toto Dupont" âge 2 Tcl: France {Paris {{Toto Dupont} {prénom Toto nom Dupont âge 26}}} Espagne {Madrid {{Pedro Sanchez} {prénom Pedro nom Sanchez âge 17}}}
incr_value France Paris "Toto Dupont" âge -2 Tcl: France {Paris {{Toto Dupont} {prénom Toto nom Dupont âge 24}}} Espagne {Madrid {{Pedro Sanchez} {prénom Pedro nom Sanchez âge 17}}}


©2005-2016 Menz Agitat