GDB signifie G DataBase. C'est un mélange entre les fichier ini et MySQL. L'avantage est qu'il est possible de mettre plusieurs valeurs pour un seul Item. Ca fonctionne en DataBase > Table > Item > Values.
Source / Exemple :
alias gdb_get {
unset %str | var %i 1 | while (%i <= $lines($1)) {
if ($left($read($1,%i),1) == $chr(60)) {
set %table $right($left($read($1,%i),$calc($pos($read($1,%i),$chr(62),1) - 1)),$calc($len($left($read($1,%i),$calc($pos($read($1,%i),$chr(62),1) - 1))) - 1))
if (%table == $2) {
var %o $calc(%i + 1) | while (%o <= $lines($1)) {
if ($left($read($1,%o),1) != $chr(60)) {
if ($gettok($read($1,%o),1,61) == $3) {
set %str $gettok($gettok($read($1,%o),2,61),$4,28)
break
} }
else { break }
inc %o } } }
inc %i }
return %str
}
alias gdb_put {
unset %antvalue | unset %table
if (!$gdb_table_exists($1,$2)) { write $1 < $+ $2 $+ > | write $1 $chr(32) }
if ($gdb_get($1,$2,$3,1)) {
var %i 1 | while (%i <= $lines($1)) {
if ($left($read($1,%i),1) == $chr(60)) {
set %table $right($left($read($1,%i),$calc($pos($read($1,%i),>,1) - 1)),$calc($len($left($read($1,%i),$calc($pos($read($1,%i),>,1) - 1))) - 1))
if ($2 == %table) {
var %o = $calc(%i + 1) | while (%o <= $lines($1)) {
if ($left($read($1,%o),1) != $chr(60)) {
if ($gettok($read($1,%o),1,61) == $3) {
set %antvalue $gdb_get($1,$2,$3,1-) | write -dl $+ %o $1
write -il $+ %o $1 $3 $+ = $+ %antvalue $+ $chr(28) $+ $4- | break } }
inc %o } } }
inc %i
} }
else {
var %i 1 | while (%i <= $lines($1)) {
if ($left($read($1,%i),1) == $chr(60)) {
set %table $right($left($read($1,%i),$calc($pos($read($1,%i),>,1) - 1)),$calc($len($left($read($1,%i),$calc($pos($read($1,%i),>,1) - 1))) - 1))
if ($2 == %table) {
write -il $+ $calc(%i + 1) $1 $3 $+ = $+ $4- | break
} }
inc %i
} } }
alias gdb_table_exists {
set %tableexists $false | var %i 1 | while (%i <= $lines($1)) {
if ($left($read($1,%i),1) == $chr(60)) {
set %table $right($left($read($1,%i),$calc($pos($read($1,%i),>,1) - 1)),$calc($len($left($read($1,%i),$calc($pos($read($1,%i),>,1) - 1))) - 1))
if ($2 == %table) { set %tableexists $true | break } }
inc %i }
return %tableexists
}
alias gdb_create_table {
if (!$gdb_table_exists($1,$2)) { write $1 < $+ $2 $+ > | write $1 $chr(32) }
}
alias gdb_delete_item {
var %i 1 | while (%i <= $lines($1)) {
if ($left($read($1,%i),1) == $chr(60)) {
set %table $right($left($read($1,%i),$calc($pos($read($1,%i),$chr(62),1) - 1)),$calc($len($left($read($1,%i),$calc($pos($read($1,%i),$chr(62),1) - 1))) - 1))
if (%table == $2) {
var %o = $calc(%i + 1) | while (%o <= $lines($1)) {
if ($left($read($1,%o),1) != $chr(60)) { if ($gettok($read($1,%o),1,61) == $3) {
write -dl $+ %o $1 | break } }
else { break }
inc %o
} } }
inc %i
} }
alias gdb_delete_value {
var %i 1 | while (%i <= $lines($1)) {
set %table $right($left($read($1,%i),$calc($pos($read($1,%i),$chr(62),1) - 1)),$calc($len($left($read($1,%i),$calc($pos($read($1,%i),$chr(62),1) - 1))) - 1))
if (%table == $2) {
var %o = $calc(%i + 1) | while (%o <= $lines($1)) {
if ($left($read($1,%o),1) != $chr(60)) { if ($gettok($read($1,%o),1,61) == $3) {
write -l $+ %o $1 $3 $+ = $+ $deltok($gdb_get($1,$2,$3,1-),$4,28)
break } }
else { break }
inc %o
} }
inc %i
} }
alias gdb_replace_value {
var %i 1 | while (%i <= $lines($1)) {
set %table $right($left($read($1,%i),$calc($pos($read($1,%i),$chr(62),1) - 1)),$calc($len($left($read($1,%i),$calc($pos($read($1,%i),$chr(62),1) - 1))) - 1))
if (%table == $2) {
var %o = $calc(%i + 1) | while (%o <= $lines($1)) {
if ($left($read($1,%o),1) != $chr(60)) { if ($gettok($read($1,%o),1,61) == $3) {
write -l $+ %o $1 $3 $+ = $+ $puttok($gdb_get($1,$2,$3,1-),$5-,$4,28)
break } }
else { break }
inc %o
} }
inc %i
} }
alias gdb_delete_table {
unset %db | var %i 1 | while (%i <= $lines($1)) {
set %table $right($left($read($1,%i),$calc($pos($read($1,%i),$chr(62),1) - 1)),$calc($len($left($read($1,%i),$calc($pos($read($1,%i),$chr(62),1) - 1))) - 1))
if (%table == $2) {
set %db %i | var %o = $calc(%i + 1) | while (%o <= $lines($1)) {
if ($left($read($1,%o),1) != $chr(60)) { write -dl $+ %o $1 | dec %o }
else { break }
inc %o
} }
inc %i }
if (%db) { write -dl $+ %db $1 } }
alias gdb_tables {
;$gdb_tables(fichier.gdb)
unset %table_list | var %i 1 | var %tables 0 | while (%i <= $lines($1)) {
if ($left($read($1,%i),1) == $chr(60)) {
inc %tables
set %table_list $addtok(%table_list,$right($left($read($1,%i),$calc($pos($read($1,%i),$chr(62),1) - 1)),$calc($len($left($read($1,%i),$calc($pos($read($1,%i),$chr(62),1) - 1))) - 1)),32)
}
inc %i
}
return %tables %table_list
}
alias gdb_items {
;$gdb_items(fichier.gdb,table)
unset %items | unset %item_list | var %i 1 | while (%i <= $lines($1)) {
if ($left($read($1,%i),1) == $chr(60)) {
set %table $right($left($read($1,%i),$calc($pos($read($1,%i),$chr(62),1) - 1)),$calc($len($left($read($1,%i),$calc($pos($read($1,%i),$chr(62),1) - 1))) - 1))
if (%table == $2) {
var %o $calc(%i + 1) | var %items 0 | unset %item_list | while (%o <= $lines($1)) { if ($left($read($1,%o),1)) {
if ($left($read($1,%o),1) != $chr(60)) { inc %items | set %item_list $addtok(%item_list,$gettok($read($1,%o),1,61),32) }
else { break } }
inc %o } } }
inc %i }
return %items %item_list }
Conclusion :
gdb_put fichier.gdb Table Item NouvelleValeur
Ajoute une valeur à l'item 'Item'.
gdb_create_table fichier.gdb NouvelleTable
Crée la table 'NouvelleTable' dans la base fichier.gdb
gdb_delete_value fichier.gdb Table Item Numero
Supprime la valeur numéro 'Numero' de l'item 'Item'
gdb_delete_item fichier.gdb Table Item
Supprime l'item 'Item' de la table 'Table'
gdb_replace_value fichier.gdb Table Item Numero NouvelleValeur
Va remplacer la valeur numéro 'Numero' de l'item 'Item' par 'NouvelleValeur'
gdb_delete_table fichier.gdb Table
Supprime la table 'Table' de la base de données fichier.gdb
$gdb_get(fichier.gdb,Table,Item,Numero)
Donne la valeur numero 'Numero' de l'item 'Item'.
Précisez 0 comme 'Numero' pour connaître le nombre de valeurs que possède 'Item'.
$gdb_table_exists(fichier.gdb,Table)
Retourne $true si 'Table' existe, sinon $false.
$gdb_tables(fichier.gdb)
Retourne un résultat en 2 parties du type : 3 Table1 Table2 Table3
3 est donc le nombre de tables que possède fichier.gdb. Ce nombre est suivi des nom de tables séparés par un $chr(32).
Donc si vous voulez le nombre de tables seulement, prenez $gettok($gdb_tables(fichier.gdb),1,32) etc...
$gdb_items(fichier.gdb,Table)
Elle fonctionne comme $gdb_tables, à savoir que le résultat est constitué de 2 parties. Le nombre d'items dans la table, et l'énumération.
C'est plus joli et mieux expliqué sur une page html, allez plutôt ici pour les commandes et fonctions
http://gfaction.free.fr/GDB.htm
Je savais pas quoi faire alors j'ai fait ça jeudi soir.
Now ça va beaucoup me servir, et j'espère pour vous aussi ;)
Allez, enjoy !
×××G-FACTION×××
13 avril 2004 à 01:26
Comme d'habitude avec G-FACTION ;o)
13 avril 2004 à 09:27
Je vais prendre le temps d'approfondir la lecture de ton code, qui me parait bien intéréssant, quand j'aurait plus de temps à moi.
Mais our ce que j'ai vu c tout à fait G-NIAL.
Originalité: 10/10 (comment j'oserais mettre moins =))
Utilité: 9/10
Scripting: 10/10
Note: 10/10
PS: Je ferait une analyse plus détaillé ce soir.
13 avril 2004 à 09:44
Egalement, histoire d'encore mieux faire, fais un addon permettant de visionner le contenu des tables que nous avons crée, sous la forme de tableau (comme http://gfaction.free.fr/GDB.htm), ou à la limite, avec une treeview.
13 avril 2004 à 11:50
13 avril 2004 à 18:59
Il y a des tas de $read() alors que tu peux le faire qu'une seule fois (à l'aide de var %) et t'en re-servir après.
En prenant le premier alias venu je constate qu'il y a 5 mêmes $read ($read($1,%i)) et 3 mêmes $read ($read($1,%o)) et encore pire deux $lines dans les boucles while.
Et l'optimisation n'est pas qu'avec $read ou $lines, avec $gettok, $left, $right,... aussi.
Donc à optimiser d'urgence.
Et tu aurais dû le mettre en niv2 car ce code n'a rien de compliqué.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.