Gdb system

4/5 (16 avis)

Snippet vu 6 471 fois - Téléchargée 31 fois

Contenu du snippet

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

A voir également

Ajouter un commentaire Commentaires
davelister Messages postés 7 Date d'inscription lundi 3 mars 2003 Statut Membre Dernière intervention 1 août 2004
13 avril 2004 à 01:26
Magnifique système :)

Comme d'habitude avec G-FACTION ;o)
JaxX83 Messages postés 47 Date d'inscription mercredi 10 décembre 2003 Statut Membre Dernière intervention 20 mai 2004
13 avril 2004 à 09:27
Il faut que je dise que tu est absent pour que tu nous post une source digne d'intéret, et ce n'est peu dire.
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.
cs_SornDrixer Messages postés 2084 Date d'inscription jeudi 12 décembre 2002 Statut Membre Dernière intervention 30 janvier 2011 8
13 avril 2004 à 09:44
Bon boulot, original, rien à dire, mais niveau rapidité, je ne sais pas si c'est le top. Un petit tableau de comparaison de rapidité par rapport aux autres moyens de stockage fournis par mIRC aurait été intéréssant.

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.
GFACTION Messages postés 199 Date d'inscription lundi 19 mai 2003 Statut Membre Dernière intervention 7 avril 2005
13 avril 2004 à 11:50
Oui SornDrixer, j'avais commencé à faire un générateur de pages HTML, mais ça m'a trop saoulé, j'aime pas a manière dont sont codés les tableaux en HTML. Bon... je pourrais retenter quand j'aurai du temps si vous voulez.
Hades53 Messages postés 231 Date d'inscription mercredi 12 février 2003 Statut Membre Dernière intervention 7 juillet 2009
13 avril 2004 à 18:59
Je n'ai pas testé ton code (il doit marcher je pense), mais en le voyant je peux constater qu'il est extrement lent.

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.