[R] Affichage du résultat d'une commande DOS dans ListBox

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
neg
Niveau 2
Niveau 2
Messages : 19
Enregistré le : mar. 03 mai 2011 09:55
Status : Hors ligne

[R] Affichage du résultat d'une commande DOS dans ListBox

#1

Message par neg »

Bonjour,

étant totalement débutant avec autoit, je viens rechercher votre aide pour quelques problèmes et questions,

Je suis en train d'écrire une petite application qui doit afficher le résultat d'une commande dos dans une listbox, mais j'ai quelques petits souci:

Ma commande est de ce type: Run('"c:\chemin\.." -optfile="c:\chemin\..." -option=*** -option=*** -option=*** "select *** from *** where type='****'")
Le premier problème viens des ' ' dans la requête sql, je cherche à savoir comment faire pour qu'autoit ne les interprète pas? J'ai testé avec "' '" ou '' '' mais sans succès.

De plus, je voudrais récupérer le résultat (une liste) de cette commande dans une listbox, j'ai écrit ceci pour le moment:

Code : Tout sélectionner

;gui
$GUI1 = GUICreate("GUI", 300, 450, 300, 200)
;listbox
$LISTBOX = GUICtrlCreateList("", 40, 80, 220, 150)
;bouton
$SHOW = GUICtrlCreateButton("Show", 200, 30, 90, 20) 
...

GUISetState(@SW_SHOW, $GUI1)

While 1
$nMsg = GUIGetMsg() ;
Switch $nMsg ; 
Case $SHOW
             $COMMAND='"c:\chemin\.." -optfile="c:\chemin\..." -option=*** -option=*** -option=*** "select *** from *** where type='****'"'
             ;$CMD=Execute($COMMAND) ;test avec execute
             $CMD=Run('$COMMAND')
             GuiCtrlSetData($LISTBOX, $CMD)

EndSwitch

WEnd
 

Si quelqu'un peut me donner un petit coup de main la dessus je l'en remercie d'avance.

J'ai également une petite question: es-ce possible de faire une comparaison du contenu de deux listbox et afficher le résultat dans une 3e listbox?

Merci
Modifié en dernier par neg le ven. 06 mai 2011 15:45, modifié 1 fois.
SurPriseS
Niveau 6
Niveau 6
Messages : 293
Enregistré le : jeu. 06 sept. 2007 11:35
Localisation : Finistère sud
Status : Hors ligne

Re: [..] Affichage du résultat d'une commande dos dans listb

#2

Message par SurPriseS »

Pour la cmd dos, peut être en envoyant le tout dans un fichier, et en allant lire se fichier après ?
neg
Niveau 2
Niveau 2
Messages : 19
Enregistré le : mar. 03 mai 2011 09:55
Status : Hors ligne

Re: [..] Affichage du résultat d'une commande dos dans listb

#3

Message par neg »

Merci SurPriseS,

j'y ai pensé aussi mais si possible je préfèrerai pouvoir le faire sans passer par un fichier, mais je garde l'idée dans un coin :)
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

Re: [..] Affichage du résultat d'une commande dos dans listb

#4

Message par ZDS »

Bonjour!

Pour la commande DOS à traiter, il y a beaucoup d'exemples sur ce cas en utilisant les regexps (moteur de recherche "regexp espace guillemet"). Je te laisse voir pour en faire une qui fonctionne. En tout cas c'est complètement inutile de passer par un fichier (j'en vois même pas le sens en fait... :s)

L'autre méthode est de séparer ta chaine avec les espaces , et de recoller les morceaux qui doivent l'etre, c'est sans doute plus facile. Je te prépare un exemple dans l'après midi.

Enfin, quand tu dis que tu veux afficher les données dans la listBox, je suppose que tu veux séparer chaque morceau de la chaine de caractères pour les mettres dans des choix différents de la listBox?

A bientôt !

EDIT: Voici l'exemple de script, dis moi si c'est le résultat que tu en attendais :
► Afficher le texte
Modifié en dernier par ZDS le jeu. 05 mai 2011 15:41, modifié 1 fois.
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
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: [..] Affichage du résultat d'une commande dos dans listb

#5

Message par jchd »

Tu n'as pas la possibilité d'exécuter ta requête SQL directement depuis AutoIt ? Quel moteur de BDD est en face ?
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
sksbir
Niveau 7
Niveau 7
Messages : 384
Enregistré le : lun. 26 oct. 2009 17:57
Localisation : Lyon
Status : Hors ligne

Re: [..] Affichage du résultat d'une commande dos dans listb

#6

Message par sksbir »

neg a écrit :Bonjour,
..........Le premier problème viens des ' ' dans la requête sql, je cherche à savoir comment faire pour qu'autoit ne les interprète pas? J'ai testé avec "' '" ou '' '' mais sans succès.
....
Bonjour

mmm, alors la commande c'est quoi ? sqlplus.exe ? Quoi qu'il en soit, ce que tu cherches à récupérer, ça n'est pas le résultat d'une commande DOS, mais le résultat d'un exécutable qui fonctionne en mode console.

Si tu voulais le résultat d'une commande DOS ( comme par exemple DIR ), il te faudrait utiliser l'astuce décrite dans l'aide de run/runwait : RunWait(@ComSpec & " /c " & "commandName")
Par ailleurs, tu dois également utiliser cette astuce si tu veux profiter de la redirection de fichiers ( > ou >> )

Concernant les ' et les ": A la base, il suffit de doubler la quote utilisée comme délimiteur.
exemple : $TEST=' je veux une simple quote ici -->''<-- donc j''en met 2 simples (et non pas une double hein..) '
ou sinon
$TEST=" je veux une quote ici-->'<-- comme je délimite avec des doubles quotes, pas besoin de doubler les simples"


Donc si tu as des soucis avec les ', essaye d'encapsuler ta commande avec des " et non plus avec des '
Ta commande devient alors: ( les " deviennent "" car " est utilisé comme délimiteur )
$COMMAND="""c:\chemin\.."" -optfile=""c:\chemin\..."" -option=*** -option=*** -option=*** ""select *** from *** where type='****'"" "

Et au fait, tout ceci est expliqué dans l'aide d'autoit ( F1 --> Autoit-->Language reference --> datatype --> "strings" )

voili voilou...
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

Re: [..] Affichage du résultat d'une commande dos dans listb

#7

Message par ZDS »

Argh !

Mea culpa; tu veux afficher le résultat de ta requête SQL dans la listBox, et non les arguments de ta commande d'appel, c'est ça?
Si oui, le code fourni précédemment ne te sert à rien, mais qu'est ce que ça peut bien te faire qu'AutoIt interprète la commande SQL? puisque au moment de l'appel, le receveur "c:\chemin\..." saura que le bloc entre guillemet est une commande entière non? (et d'ailleurs, où est ce que tu vois que la commande est interpretée?)

PS: sksbir a raison, tu ne peux pas récupérer comme ça le contenu d'une requête SQL par un Run (qui ne retourne qu'un PID ou un code d'erreur, rien d'autre), il faut que tu passes par une UDF pour ça.
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
neg
Niveau 2
Niveau 2
Messages : 19
Enregistré le : mar. 03 mai 2011 09:55
Status : Hors ligne

Re: [..] Affichage du résultat d'une commande dos dans listb

#8

Message par neg »

Ok, merci pour les précisions, et sa fonctionne niquel avec les "", merci!

En fait oui la commande lance un exécutable (à qui je passe en option un fichier de conf et des options) qui ensuite lance la requête sql.

La du coup avec le run je récupère bien la sortie de la commande, par exemple dans un fichier texte:
Run("""c:\chemin\.."" -optfile=""c:\chemin\..."" -option=*** -option=*** -option=*** ""select *** from *** where type='****'""> C:\test.txt")

Je vais voir du côté UDF alors, merci.

Et merci pour l'exemple de script ZDS, mais oui je veux juste récupérer le résultat de la requête dans ma listbox.

@jchd: non je ne peux pas exécuter directement la requête depuis autoit, mais oui sinon c'est sur que sa serai plus simple :(
neg
Niveau 2
Niveau 2
Messages : 19
Enregistré le : mar. 03 mai 2011 09:55
Status : Hors ligne

Re: [..] Affichage du résultat d'une commande DOS dans ListB

#9

Message par neg »

Bonjour,

à priori sa va marcher comme sa, je récupère la sortie de la commande dans un fichier et le compare avec un autre.
Par contre je bloque un peu sur la comparaison de fichiers, pourriez-vous me dire s'il existe un genre de "while read line" avec autoit?

j'ai écrit sa:

Code : Tout sélectionner

While 1
     $line = FileReadLine($file_list)
     If @error = -1 Then ExitLoop
     GuictrlSetData ($LIST1, $line)
     While 1
     $line2 = FileReadLine($file_list2)
          If @error = -1 Then ExitLoop
          If ($line2 <> $line) Then
               GuictrlSetData ($LIST2, $line2)
          EndIf
     Wend
     FileClose($file_list2)
Wend
FileClose($file_list)
mais il sort de boucle dès la première occurrence,
j'imagine que sa viens du While 1 et If @error = -1 Then ExitLoop, donc je cherche à savoir comment lui dire de comparer chaque ligne de $file_list avec toutes les lignes de $file_list2?

Merci d'avance
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

Re: [..] Affichage du résultat d'une commande DOS dans ListB

#10

Message par ZDS »

Bonjour,

Ce que tu passes dans le FileReadLine est un flux, et non un fichier, c'est pourquoi après un tour de boucle dans le second while, le flux $file_list2 est arrivé en bout de course, il faut le réinitialiser :
► Afficher le texte
Sinon, question algo, je ne vois pas ce que ton script peut faire, car en fait il va afficher n fois la même ligne du fichier 2 si il existe n lignes du fichier 2 qui ne sont pas les mêmes que dans le 1, du point de vue logique, c'est assez idiot, non? ^^ Tu veux faire quoi : afficher toutes les lignes des deux fichiers sans aucun doublon? afficher les lignes du fichier 1 qui sont aussi (ou qui ne sont pas) dans le fichier 2 ? etc...

Donne nous plus d'infos :)

A bientôt !
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
neg
Niveau 2
Niveau 2
Messages : 19
Enregistré le : mar. 03 mai 2011 09:55
Status : Hors ligne

Re: [..] Affichage du résultat d'une commande DOS dans ListB

#11

Message par neg »

Merci pour ta réponse,

oui en fait j'ai mit ces deux lignes plus haut dans mon script
$file_list = FileOpen($fichier, 0)
$file_list2 = FileOpen($fichier2, 0)

En fait je veux afficher dans une listbox les lignes du fichier 2 seulement si elles ne sont pas dans le fichier1, mais je viens de réussir avec

Code : Tout sélectionner

...If StringInStr($line,$line2,2) <> 0 Then...
à la place de

Code : Tout sélectionner

...If ($line2 <> $line) Then GuictrlSetData ($LIST2, $line2)...
Donc c'est bon, je vais essayer de réécrire sa proprement sans utiliser de fichiers mais pour le moment sa ira :)

Merci pour ton aide en tout cas!
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: [R] Affichage du résultat d'une commande DOS dans ListBo

#12

Message par jchd »

Pour la question de la comparaison de fichiers ou (problème essentiellement équivalent) trouver ou supprimer les doublons dans 2 à n fichiers texte, voir ce fil de discussion (en anglais). Les méthodes exposées permettent de traiter des fichiers assez gros (avec ScriptingDictionary) ou dépassant de loin la mémoire disponible (avec SQlite) et ont toutes deux une complexité en O(N Log(N)).

S'il ne s'agit que de quelques lignes, la méthode brutale suffira (complexité en O(N M))
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Répondre