Page 2 sur 2

Re: [R] Rechercher plusieurs fois une valeur dans un fichier

Posté : mar. 23 août 2011 17:26
par jchd
Que fait là l'incrémentation ($i = $i + 1) juste après le FOR extérieur ?

Quel code erreur renvoie _SQLite_GetTable2d ?
Si OK, que donne un _ArrayDisplay de $rows ?

Re: [R] Rechercher plusieurs fois une valeur dans un fichier

Posté : mar. 23 août 2011 17:30
par ludoo
ludoo a écrit :voici le code de la requete :

Code : Tout sélectionner

Func ReqBD_BE_1()
$res = _SQLite_GetTable2d($hDb, "select user as [Utilisateur], (select total(pages * copies) from log G where L.user = G.user and g.paper = 'A3') as [Pages A3 imprimées], (select total(pages * copies) from log G where L.user = G.user and g.paper = 'A4') as [Pages A4 imprimées] from log L where printer = "& X($impBE1)&" group by user ;", $rows, $nrows, $ncols)
EndFunc
la 2eme requête est identique a par le nom de l'imprimante
même erreur avec

Code : Tout sélectionner

For $i = 0 to $rows - 1

Re: [R] Rechercher plusieurs fois une valeur dans un fichier

Posté : mer. 24 août 2011 14:06
par ludoo
le _ArrayDisplay de $rows s'affiche correctement avec les bonnes info.
je voudrai sortir de ce array les informations (user, pages a4, pages a3), peut être que la boucle For n'est à utiliser ?
je récupère la variable user pour l'envoyer ds "$aUser = _AD_GetUserGroups($user)" (UDF Active Directory) qui me donne les groupes AD de cet utilisateur.

Re: [R] Rechercher plusieurs fois une valeur dans un fichier

Posté : mer. 24 août 2011 16:29
par jchd
Tu as une incrémentation parasite de $i, juste après ton For extérieur.

Re: [R] Rechercher plusieurs fois une valeur dans un fichier

Posté : mer. 24 août 2011 16:33
par ludoo
oui le

Code : Tout sélectionner

$i = $i +1
, ce qui permet de passer à la ligne suivante du array , sinon il reste bloqué sur la première.
je tourne en rond dessus :shock:

Re: [R] Rechercher plusieurs fois une valeur dans un fichier

Posté : jeu. 25 août 2011 01:56
par jchd
On passe tous à côté, moi le premier... Enfin, c'est la myopie traditionnelle à l'oeuvre ! ( For $i = 0 To $nrows - 1)
► Afficher le textetext
Déclare tes variables locales, passe tes $rows, $nrows en byref et règle aussi le cas de ce $file.
Met ça en tête de tous tes modules principaux, ça t'évitera des heures de grattage de cervelas :

Code : Tout sélectionner

#AutoIt3Wrapper_au3check_parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6

Re: [R] Rechercher plusieurs fois une valeur dans un fichier

Posté : jeu. 25 août 2011 09:22
par ludoo
je comprend pas comment passé le resultat $nrows et $rows en byref à la fonction ResBE
puis à l'autre fonction BE,
voici le code ds son intégralité.
► Afficher le texte
merci pour ton aide
pour le $file c une erreur de frappe .

Re: [R] Rechercher plusieurs fois une valeur dans un fichier

Posté : jeu. 25 août 2011 11:48
par jchd
J'ai mis les variables de travail là où elles sont pertinentes et aussi passé le nom de l'imprimante BE en cours de traitement. J'ai fait une boucle sur toutes les BE (je n'ai aucune idée si c'est correct pour toi, mais ça te montre comment bien utiliser des variables en argument de fonction(s).
Ah oui, pense à employer OnAutoitExitRegister pour simplifier ton code, ne rien risquer d'oublier et aussi pour simplifier tes traitements d'erreur fatale. Par exemple, tu fais un "Exit" brutal si tel fichier ne peut être ouvert. En théorie, tu devrais invoquer _AD_Close() et _SQLite_Shutdown() avant la ligne Exit. Ces fonctions-là sont souvent optionnelles et ne pas les appeler ne "casse" rien dans une majorité de cas. Mais il n'en va pas toujours ainsi.
Si une erreur grave survient dans une fonction "enfouie" au nième niveau, cette fonction n'est pas censée avoir connaissance du fait que on utilise AD ou SQLite ou quoi que ce soit d'autre dans les couches au-dessus d'elle. Il n'appartient donc pas à une fonction de niveau N de se permettre de bidouiller des resources qui concernent les niveaux N-1, N-2, ... Un bon désign est de remonter cette erreur pour en informer les fonctions de niveau supérieur et ainsi leur donner une chance de fermer proprement fichiers et autres resources en cours d'utilisation. Un tel design est certes idéal mais lourd en pratique. Le mécanisme d'appel automatique de fonctions à la sortie d'AutoIt simplifie partiellement le problème et il ne faut pas se priver de l'utiliser.
► Afficher le texte

Re: [R] Rechercher plusieurs fois une valeur dans un fichier

Posté : jeu. 25 août 2011 12:36
par ludoo
merci pour les explications , sur la fonction ReqBD_BE pourquoi on met 'ByRef $rows, ByRef $nrows' alors qu'il n'existe pas encore ?

l'idéal serait de récupérer l' user du fichier texte , de le passer à la fonction AD ,pour connaitre le groupe , ajouter la fin de chaque ligne le groupe puis de mettre tout cela ds la base sqlite.

merci du temps consacré pour mon probleme.

Re: [R] Rechercher plusieurs fois une valeur dans un fichier

Posté : jeu. 25 août 2011 16:51
par jchd
Byref permet de passer non pas une copie d'une variable, mais une référence à cette variable, dont la fonction appelée peut changer le contenu à loisir (ou pas). Le principe évite de faire des copies de variables potentiellement volumineuses.
Les variables sont déclarées au niveau de la fonction BE() donc elles existent. Peu importe leur contenu (qui existe déjà, du seul fait de leur déclaration) pour la fonction de requête, car celle-ci va en changer le contenu car c'est justement son rôle. Par contre, ta fonction d'exploitation des résultats récupère ce contenu qui est maintenant significatif et agit en conséquence. On pourrait préciser pour celle-ci Const Byref, ce qui empêcherait d'en changer le contenu ou, à tout le moins, indiquerait clairement que ces variables sont "read-only" à ce niveau.

On ne dispose certes pas avec AutoIt de toute la panoplie des nuances que propose un langage plus subtil, mais on a quand même les moyens d'écrire du code propre et essentiellement maintenable, à condition de s'en donner la peine. Dans l'immense majorité des cas d'outils promis à une durée de vie non météoritique (je veux dire par là : prévus pour durer "un certain temps"), cet effort vaut la peine d'être produit et diminue la fragilité ou plutôt, augmente la stabilité et la dure de vie utile de cet outil/programme. D'un point de vue comptable (professionnel) c'est un gros pourcentage du coût global de la chose qui est ainsi économisé, indépendemment du contexte, du langage, etc.
l'idéal serait de récupérer l' user du fichier texte , de le passer à la fonction AD ,pour connaitre le groupe , ajouter la fin de chaque ligne le groupe puis de mettre tout cela ds la base sqlite.
Bien, et ce qui t'empêche de faire ainsi est ... ?
Bien que mon petit doigt me dit qu'en fait, tu récupères la liste des groupes auquels cet utilisateur appartient, et non pas un seul et unique groupe par utilisateur et que c'est là que tu coinces.
Par ailleurs, comment remets-tu à zéro le fichier groupBE.txt ?

Re: [R] Rechercher plusieurs fois une valeur dans un fichier

Posté : mar. 13 sept. 2011 16:55
par ludoo
oui , effectivement je récupère tous les groupes AD dont l'utilisateur fait parti , pour remettre le fichier groupeBE.txt à zéro pas pensé .
je modifie ma stratégie , sortir l'utilisateur du fichier texte , chercher les groupes puis recréer un fichier texte avec toutes les infos et envoyer ds sqlite.
mais je bloque déjà sur le premier , j'arrive bien à lire le fichier texte , à faire le split pour avoir chaque valeur , mais pas à sortir l'utilisateur.
voici le code :
► Afficher le texte
je progresse dans le code mais je voudrai l'améliorer ,
pour résumer je récupère bien les groupes AD dont l'utilisateur fait parti mais par contre je connais pas avance le nombres groupe,
une fois les groupe trouvé , je les insère ds un fichier texte avec d'autre information,
j'ai trouvé une solution mais pas très optimisé
voici le code :
► Afficher le texte
j'ai bien mon nouveau fichier avec les groupesAD , comment les insérer ds Sqlite , à savoir que je connais pas le nombre de groupe.
un champ Sqlite peut avoir plusieurs valeur ?

Dans mon champ GroupeAD , j'ai l"ensemble des groupes , séparé par "|"
maintenant je cherche la requête Sqlite pour chercher sur un seul groupe + copies + pages par user
ex:
► Afficher le texte

Re: [R] Rechercher plusieurs fois une valeur dans un fichier

Posté : mer. 14 sept. 2011 17:41
par jchd
Désolé, je ne suis plus en mesure de contribuer ici actuellement (suis, grosso modo, SDF et sans internet).

Re: [R] Rechercher plusieurs fois une valeur dans un fichier

Posté : jeu. 15 sept. 2011 11:32
par ludoo
j'espère que ta situation va s'améliorer , en tout cas merci pour ton aide .

pour la requête j'ai trouvé ça :
► Afficher le texte