Page 1 sur 1
[..] XML et AutoIT
Posté : lun. 29 juil. 2013 15:40
par shiirosan
Bonjour/Bonsoirs, nouveau problème sur AutoIT pour ma part. Cette fois-ci, j'essaye de faire pour que mon script AutoIT lise les lignes d'un XML et qu'il choisissent de manière aléatoire une réponse sur toute celle donnée. (Création d'un bot pour IRC, considérer comme autre bot ou pas ? Si oui, alors je chercherais ailleurs.)
► Afficher le textefichier xml
Code : Tout sélectionner
<?xml version="1.0" encoding="ISO-8859-1"?>
<category>
<pattern>CONNECT</pattern>
<template>
<random>
<li>Salut, </li>
<li>Bonjour, </li>
<li>Hello, </li>
</random>
</template>
</category>
► Afficher le textecode autoit
Code : Tout sélectionner
#include <XML.au3>
Global $contents = _XMLLoad("essai.aiml")
Global $categories_num = __StringNumOccur($contents, "<category>")
Global $patterns[$categories_num + 1]
Global $templates[$categories_num + 1]
Global $Li[$categories_num + 1]
For $i=1 To $categories_num
$cat_contents = _XMLGet ($contents, "category", $i)
$cat_pattern = _XMLGet ($cat_contents, "pattern")
__StringStripPunct ($cat_pattern)
If @error Then Exit MsgBox (48, "AIML Bot", "AIML Syntax Error:"&@CRLF&@CRLF&"Category number "&$i&" does not have a <pattern> tag. Please check your code and try again.")
If $cat_pattern = "" Then Exit MsgBox (48, "AIML Bot", "AIML Syntax Error:"&@CRLF&@CRLF&"The <pattern> tag in category number "&$i+1&" is empty. Please check your code and try again.")
$patterns[$i] = $cat_pattern
$cat_template = _XMLGet ($cat_contents, "template")
If @error Then Exit MsgBox (48, "AIML Bot", "AIML Syntax Error:"&@CRLF&@CRLF&"Category number "&$i&" does not have a <template> tag. Please check your code and try again.")
If $cat_template = "" Then Exit MsgBox (48, "AIML Bot", "AIML Syntax Error:"&@CRLF&@CRLF&"The <template> tag in category number "&$i+1&" is empty. Please check your code and try again.")
$templates[$i] = $cat_template
$cat_random = _XMLGet ($cat_template, "random")
$Li = _XMLGet ($cat_random, "li")
Next
MsgBox(0,"", $Li)
Comme on peut le voir d’après mon code, (en partie repris d'un autre bot pour IRC), j'essaye de faire pour que la balise <Li> soit lu de manière aléatoire... Le principal probleme, c'est qu'il ne renvoit que le premier message.
Merci de me signaler si se genre de problèmes est interdit sur le forum, et, si ce n'est pas le cas, de bien vouloir m'aider.
---EDIT---
J'ai ajouté le fichier XML.au3 qui peut-être utile.

Re: XML et AutoIT
Posté : lun. 29 juil. 2013 16:35
par TopXm
Hello
J'ai fait dans la simplicité, j'ai enregistré ton fichier XML en tant que _RanDom.txt avec une boucle sur 5
Du coup en passant par un tableau puis un Random ça pourrait donner un truc du style :
Code : Tout sélectionner
#include <array.au3>
Local $Buf = FileRead("_Random.txt")
local $Arr = StringRegExp($Buf, '(?s)<li>(.*?)</li>', 3)
_ArrayDisplay($Arr)
Local $I, $Ind
For $I = 1 To 5
$Ind = Random(0, UBound($Arr)-1, 1)
ConsoleWrite('Retour = ' & $Arr[$Ind] & @CRLF)
Next
Re: XML et AutoIT
Posté : lun. 29 juil. 2013 16:59
par shiirosan
fonctionne seul, mais une fois que je le met dans mon script, ne fonctionne plus... Je fait quelque essais et si mon problème n'est pas réglé je reviens vous voir. Merci beaucoup de l'aide déjà fourni

Re: XML et AutoIT
Posté : lun. 29 juil. 2013 17:07
par mikell
@TopXm
C'est le genre de code où il vaut mieux systématiquement faire une bonne gestion d'erreur
Code : Tout sélectionner
Msgbox(64, "", _salut() )
Func _salut()
Local $Buf = FileRead("_Random.txt")
local $Arr = StringRegExp($Buf, '(?s)<li>(.*?)</li>', 3)
If IsArray($Arr) Then
Return $Arr[Random(0, UBound($Arr)-1, 1)]
Else
Return SetError(1, 0, "salut par défaut")
EndIf
EndFunc
Re: XML et AutoIT
Posté : lun. 29 juil. 2013 17:24
par shiirosan
Mikell, vous êtes un miracle ! Le programme fonctionne correctement et le message est bien écrit !
---EDIT---
Encore un problème T.T Pourrais-je avoir une discutions privés avec vous Mikell ? Je ne préfère pas mettre mes sources sur internet pour le moment...
Re: XML et AutoIT
Posté : lun. 29 juil. 2013 17:41
par mikell
shiirosan a écrit : le message est bien écrit !
Attention, si le message qui s'écrit est "salut par défaut", c'est qu'il y a toujours une cagade !
Sinon ok pour le mp