Page 1 sur 1
[R] Créer des variables automatiquement dans un programme
Posté : ven. 10 avr. 2009 12:24
par Andhu
Bonjour,
Etant débutant sous AutoIt, je me permets de vous poser une petite question:
Est-il possible de dire à un programme de créer des variables tout seul?
Je m'explique:
J'ai un fichier .csv comportant 3 colonnes:
- Catégorie Article
- Code Article
- Valeur Article
Mon but est de trier dans un nouveau fichier excel, le tableau précédent.
Dans l'idée je dois trier par Catégorie d'articles, calculer le nombre d'articles existant pour chaque catégorie et établir la valeur totale des articles d'une même catégorie.
Le problème, c'est que les catégories varient d'un mois à l'autre, certaines peuvent disparaîtrent et d'autres se créer.
C'est pourquoi je vous demande, est-il possible avec du code de créer une variable à chaque fois que mon programme rencontre une nouvelle catégorie?
Dans l'attente de vos réponses...
Re: [...] Créer des variables automatiquement dans un programme
Posté : ven. 10 avr. 2009 14:22
par GaRydelaMer
Bonjour
un truc vite fait, pour ouvrir et faire les calculs
Fichiers "c:\un dossier avec des fichiers csv\zz.csv"
Code : Tout sélectionner
Catégorie Article;Code Article;Valeur Article
zz;1;10
aa;5;14
bb;9;11
aa;6;15
bb;8;1
Il te faut créer un fichier "c:\un dossier avec des fichiers csv\Schema.ini"
Code : Tout sélectionner
[zz.csv]
ColNameHeader=True
Format=Delimited(;)
MaxScanRows=0
CharacterSet=ANSI
Col1="CATÉGORIE ARTICLE" Char
Col2="CODE ARTICLE" Long
Col3="VALEUR ARTICLE" long
Ensuite une fois fait ca, avec les possibilité du SQL:
Code : Tout sélectionner
Local $oConn = ObjCreate("ADODB.Connection")
With $oConn
.ConnectionString = "Driver={Microsoft Text Driver (*.txt; *.csv)};Extensions=csv;Dbq=c:\un dossier avec des fichiers csv\;"
.Open
EndWith
Local $_oRS = ObjCreate("ADODB.Recordset")
Local $sql = "SELECT [Catégorie Article], Count([Code Article]) AS Nb, Sum([Valeur Article]) AS Somme " & _
"FROM zz.csv " & _
"GROUP BY [Catégorie Article] " & _
"ORDER BY [Catégorie Article]"
$_oRS.Open($sql, $oConn, 3, 3)
While Not $_oRS.EOF
Local $cat = $_oRS.Fields(0).Value
Local $nb = $_oRS.Fields(1).Value
Local $somme = $_oRS.Fields(2).Value
ConsoleWrite($cat & " " & $nb & " " & $somme & @LF)
$_oRS.MoveNext
WEnd
Résultat dans la console:
catégorie "aa", 2 articles, somme des 2 articles 29
catégorie "bb", 2 articles, somme des 2 articles 12
catégorie "zz", 1 articles, somme des 1 articles 10
Re: [...] Créer des variables automatiquement dans un programme
Posté : mer. 15 avr. 2009 10:24
par Andhu
Merci pour ton aide.
Cependant, malgré le fait que j'ai bien suivi tes instructions, j'ai un message d'erreur:
Line -1:
Error: The requested action with this object has failed
J'ai du faire quelque chose de travers je pense...
Le code avec la requête SQL, il fallait le mettre dans un fichier au3 n'est-ce pas?
Merci encore pour ton aide.
Re: [...] Créer des variables automatiquement dans un programme
Posté : mer. 15 avr. 2009 18:04
par GaRydelaMer
Bonjour
Oui tu mets la dernière partie dans un fichier au3.
Il te faut modifier la ligne:
.ConnectionString = "Driver={Microsoft Text Driver (*.txt; *.csv)};Extensions=csv;Dbq=c:\un dossier avec des fichiers csv\;"
Mets le dossier ou se trouve ton fichier CVS.
Re: [...] Créer des variables automatiquement dans un programme
Posté : jeu. 16 avr. 2009 15:17
par Andhu
J'avais modifié le chemin t'inquiètes. J'ai tout placé dans un dossier à la racine comme tu m'as dit et maintenant quand je lance le .exe, rien ne se passe... Le bon côté des choses c'est qu'il n'y a plus d'erreurs au moins xd
En réalité il semble qu'il se lance puis 1 seconde plus tard se coupe. J'arrive à voir dans le gestionnaire de tâches Windows le script.exe qui apparait puis disparait :s
Re: [...] Créer des variables automatiquement dans un programme
Posté : jeu. 16 avr. 2009 15:34
par GaRydelaMer
Bonjour
pour voir le résultat depuis Scite, au lieu de faire F7 ou ctrl+F7 (compiler le programme cad créer le .exe), fais simplement F5 tu auras les résultat dans la console de scite, ou remplce consolewrite() par un msgbox().
Chris