[R] sqlite : boucle _SQLite_FastEscape($split[..]) & ", "

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
aulus
Niveau 7
Niveau 7
Messages : 424
Enregistré le : lun. 25 mars 2013 19:38
Status : Hors ligne

[R] sqlite : boucle _SQLite_FastEscape($split[..]) & ", "

#1

Message par aulus »

Bonsoir,

Voici mon code remplissant la table "liste d'une base sqlite en puisant les données dans un fichier texte :

Code : Tout sélectionner

_SQLite_Startup ()
$Base_SQLite = _SQLite_Open($sqlite)

   _SQLite_Exec ($Base_SQLite, "CREATE TABLE IF NOT EXISTS liste (numero, nom, prenom, jourNaiss, moisNaiss, anneeNaiss, sexe, origine, profession, commentaire);")

   $fichier = FileOpen($File, 0)    ; fichier texte
  _SQLite_Exec($Base_SQLite, "Begin;")

   While 1
       $line = FileReadLine($fichier)
       If @error = -1 Then ExitLoop

    $split = StringSplit($line, "|")


        _SQLite_Exec($Base_SQLite, "INSERT INTO liste VALUES (" & _
                _SQLite_FastEscape($split[1]) & ", " & _
                 _SQLite_FastEscape($split[2]) & ", " & _
                _SQLite_FastEscape($split[3]) & ", " & _
                 _SQLite_FastEscape($split[4]) & ", " & _
                 _SQLite_FastEscape($split[5]) & ", " & _
                 _SQLite_FastEscape($split[6]) & ", " & _
                 _SQLite_FastEscape($split[7]) & ", " & _
                 _SQLite_FastEscape($split[8]) & ", " & _
                 _SQLite_FastEscape($split[9]) & ", " & _
                 _SQLite_FastEscape($split[10]) & ");")
   WEnd

   _SQLite_Exec($Base_SQLite, "Commit;")
   FileClose($fichier)
   _SQLite_Close()
_SQLite_Shutdown()
 
Les lignes _SQLite_Exec($Base_SQLite, "Begin;") et _SQLite_Exec($Base_SQLite, "Commit;") ont quelle utilité ?

D'autre part, j'aimerais faire une boucle pour éviter de coder la centaine de _SQLite_FastEscape($split[..]) & ", " & _ . J'ai tenté de le faire avec un for... Next... mais ça ne colle pas.

Je vous remercie de m'éclairer sur ces questions.
Modifié en dernier par aulus le lun. 15 juil. 2013 22:51, modifié 1 fois.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] sqlite : boucle _SQLite_FastEscape($split[..]) & ",

#2

Message par mikell »

J'avais fait ça une fois avec des valeurs stockées dans une array

Code : Tout sélectionner

$string = ""
For $i = 1 to $a[0]-1
      $string &= _SQLite_FastEscape($a[$i]) & ", "
Next
$string &= _SQLite_FastEscape($a[$a[0]])

_SQLite_Exec(-1, "INSERT INTO liste (.....) VALUES (" & $string & ");")
Pour le begin et commit, jchd en avait parlé, c'est pour optimiser l'entrée des instructions (je crois..) en tout cas au niveau rapidité c'est assez spectaculaire
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
aulus
Niveau 7
Niveau 7
Messages : 424
Enregistré le : lun. 25 mars 2013 19:38
Status : Hors ligne

Re: [..] sqlite : boucle _SQLite_FastEscape($split[..]) & ",

#3

Message par aulus »

Merci Mikell,

Pouvez-vous m'expliquer la présence de la ligne codée après la boucle :

Code : Tout sélectionner

$string &= _SQLite_FastEscape($a[$a[0]])
 
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] sqlite : boucle _SQLite_FastEscape($split[..]) & ",

#4

Message par mikell »

Dans mon exemple $a[0] représente le nombre d'éléments dans l'array, donc $a[$a[0]] étant le dernier élément de l'array cette dernière ligne c'est pour la syntaxe de la fin de l'expression

Code : Tout sélectionner

       _SQLite_Exec($Base_SQLite, "INSERT INTO liste VALUES (" & _
                _SQLite_FastEscape($split[1]) [color=#FF0000]& ", "[/color] & _
                 ......
                 _SQLite_FastEscape($split[9]) [color=#FF0000]& ", "[/color] & _
                 _SQLite_FastEscape($split[10]) [color=#FF0000]& ");")[/color]
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] sqlite : boucle _SQLite_FastEscape($split[..]) & ",

#5

Message par jchd »

Perso, j'utilise des fonctions "raccourcies" pour faciliter la lisibilité : les X, Y et Z encapsulent respectivement chaînes, binaires et valeurs numériques. Les XX, YY et ZZ font pareil mais ajoutent une virgule avant.
► Afficher le texte
Ca donne des choses comme ça :
► Afficher le texte
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
aulus
Niveau 7
Niveau 7
Messages : 424
Enregistré le : lun. 25 mars 2013 19:38
Status : Hors ligne

Re: [..] sqlite : boucle _SQLite_FastEscape($split[..]) & ",

#6

Message par aulus »

@Mikell
Ce $a[$a[0]] est des plus abscons pour moi. Je n'en comprenais pas le sens. Merci pour votre code qui fonctionne à merveille et m'évite une tripotée de lignes.

@jchd
Je prends note de l'idée pour l'avenir.

Merci à tous deux.
Répondre