[R] Chercher et lire entre balise

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
Ks10
Niveau 6
Niveau 6
Messages : 282
Enregistré le : mer. 25 avr. 2012 20:38
Status : Hors ligne

[R] Chercher et lire entre balise

#1

Message par Ks10 »

Bonsoir à tous !

Je me heurte à un petit problème.
J'aimerais pouvoir lire dans une GUI certains éléments d'un fichier texte.

J'ai le schéma de la procédure de lecture dans ma tête mais j'ai du mal à le reproduire sous Autoit.
* On ouvre le fichier texte.
* On recherche la balise de début
* On recherche la balise de fin
* On récupère ce qui y a à l'intérieur de ces balises
* On envoie ce qui y a entre ces balises dans la GUI avec un GuiCtrlSetData.

Exemple de mon fichier texte :

Code : Tout sélectionner

<mabalise> 
Bonjour,
Mon pseudo c'est KS10 et je découvre pleins de choses sur autoit :) 
</findemabalise>
Quels sont les commandes et la structure du code qui me permettrais de faire sa ?
Modifié en dernier par Ks10 le sam. 22 juin 2013 09:23, 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: [..] Chercher et lire entre balise

#2

Message par mikell »

Code : Tout sélectionner

$txt = "<mabalise>" &@crlf& _ 
"Bonjour," &@crlf& _ 
"Mon pseudo c'est KS10 et je découvre pleins de choses sur autoit :)" &@crlf& _ 
"</findemabalise>"

$res = StringRegExp($txt, '(?s)<mabalise>\s*(.*?)</findemabalise>', 3)
Msgbox(0,"", $res[0])
ou alors le regex du pauvre :mrgreen:

Code : Tout sélectionner

#include <String.au3>

$txt = "<mabalise>" &@crlf& _ 
"Bonjour," &@crlf& _ 
"Mon pseudo c'est KS10 et je découvre pleins de choses sur autoit :)" &@crlf& _ 
"</findemabalise>"

$res = _StringBetween($txt, "<mabalise>", "</findemabalise>")
Msgbox(0,"", $res[0])
" 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
Ks10
Niveau 6
Niveau 6
Messages : 282
Enregistré le : mer. 25 avr. 2012 20:38
Status : Hors ligne

Re: [..] Chercher et lire entre balise

#3

Message par Ks10 »

mikell a écrit :

Code : Tout sélectionner

$txt = "<mabalise>" &@crlf& _ 
"Bonjour," &@crlf& _ 
"Mon pseudo c'est KS10 et je découvre pleins de choses sur autoit :)" &@crlf& _ 
"</findemabalise>"

$res = StringRegExp($txt, '(?s)<mabalise>\s*(.*?)</findemabalise>', 3)
Msgbox(0,"", $res[0])
ou alors le regex du pauvre :mrgreen:

Code : Tout sélectionner

#include <String.au3>

$txt = "<mabalise>" &@crlf& _ 
"Bonjour," &@crlf& _ 
"Mon pseudo c'est KS10 et je découvre pleins de choses sur autoit :)" &@crlf& _ 
"</findemabalise>"

$res = _StringBetween($txt, "<mabalise>", "</findemabalise>")
Msgbox(0,"", $res[0])
Une petite question ?
On n'est obliger d'écrire ce qu'il y a dans la balise ?
On ne peut pas forcer le programme à prendre automatiquement ce qu'il y a entre ces deux balises ?
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Chercher et lire entre balise

#4

Message par mikell »

C'est bien ce que fait le code ^^

Code : Tout sélectionner

$txt = "texte ... etc tralala <mabalise>là ya ce que tu veux</findemabalise> tsoin tsoin ... texte etc"
$res = StringRegExp($txt, '(?s)<mabalise>\s*(.*?)</findemabalise>', 3)
Msgbox(0,"", $res[0])
" 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
Ks10
Niveau 6
Niveau 6
Messages : 282
Enregistré le : mer. 25 avr. 2012 20:38
Status : Hors ligne

Re: [..] Chercher et lire entre balise

#5

Message par Ks10 »

Non mais je veux dire :

On n'est bien d'accord si je ne précise pas le "la ya ce que tu veux " sa :

Code : Tout sélectionner

$txt = "texte ... etc tralala <mabalise>là ya ce que tu veux</findemabalise> tsoin tsoin ... texte etc"
Entre les balises, le programme n'est pas capable d'ouvrir le fichier texte, de détecter la balise de début et de fin et de prendre ce qui y a à l'intérieur.

Look mon code de test :

Code : Tout sélectionner

#include <String.au3>


$file = FileOpen(@ScriptDir & "balise.txt")
FileRead($file)

$texte = "<testing>" &@CRLF& _
"</testing>"

$res = _StringBetween($texte, "<testing>", "</testing>")
MsgBox(64, "Informations", $res[0])

J'ai rien mit entre les balises la et lorsque je l'execute bah il y a rien dans ma msgbox.
Ton code fonctionne pour du contenue fixe mais moi je ne pourrait pas prédire ce qui apparaitra entre les balises en faite,
c'est pour sa que je veux qu'il recherche les balises dans le fichier texte et qu'il prend ce qui y a entre ^^
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] Chercher et lire entre balise

#6

Message par timmalos »

Le code de mikell devrait fonctionner, et le votre également. Vous devez avoir une erreur quelque part, car les 2 codes vont bien prendre le texte à l'interieur de la balise quel qu'il soit, sans qu'on le connaisse auparavant.

Il vous faut vérifier votre fichier, qu'il soit bien lu, que la variable contienne le texte récupéré, puis voir avec le code d'erreur de _StringBetween() si un autre problème n'est pas survenu

[Hors sujet]
Et je prefere clairement la solution _StringBetween, il est très très chiant de tomber sur des bouts de code en entreprise avec des RegExp qui ne font au final que des opérations très simples alors qu'elles sont compliquées en elles mêmes. Pensez aux personnes qui lisent le code derrière vous, ou même à vous même dans 1 an qui relirez ce code, le _StringBetween est clairement indiqué dans ce cas, bcp plus clair et simple, pour aucune perte de temps par rapport à la RegExp. (A cette echelle)
[/Fin Hors Sujet]
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: [..] Chercher et lire entre balise

#7

Message par jchd »

[trop HS]
Encore un qui ne passerait pas ses vacances avec Jeffrey Friedl.
Pffft, tout fout le camp !
[/trop HS]
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] Chercher et lire entre balise

#8

Message par timmalos »

[Encore plus HS]
Au contraire ce mec est un génie ! Mais quand on a des fonctions évoluées comme _StringBetween, aucune problématique de temps de réponse alors oui je suis contre une regexp ^^
[/Encore plus HS]
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Chercher et lire entre balise

#9

Message par mikell »

@Ks10
Ce code n'était fait que pour lire entre des balises, pas pour ouvrir un txt ni pour faire le café
Et le tien fonctionne, une fois corrigées les erreurs de syntaxe

Code : Tout sélectionner

#include <String.au3>

$texte = FileRead(@ScriptDir & "\balise.txt")
$res = _StringBetween($texte, "<mabalise>", "</mabalise>")
MsgBox(64, "Informations", $res[0])
@tim
Bien conscient du fait et soucieux d'éviter toute polémique, j'avais donc proposé les 2 options :roll:
[Mode orangemikell ON]
Mais puisque tu abordes le sujet, ton raisonnement revient à dire "applique cette recette, mais surtout ne cherche pas à savoir pourquoi et comment elle fonctionne" ... le genre de discours réducteur que les dirigeants politiques affectionnent
Oh oui le _StringBetween est plus facile, mais si on veut faire en plus un léger traitement de la string obtenue, faudra enchaîner une collection de fonctions StringMachin alors qu'une petite modif du regex aurait pu suffire ^^
L'OP intelligent aura (peut-être) percuté sur le res[0] et aura (peut-être) la curiosité d'aller jeter un coup d'oeil dans l'include String.au3
Toutefois, je reconnais qu'il est bon d'entretenir chez le newbie une sainte terreur du regex, ça pérennise le respect envers le clergé Image
[OFF]
" 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
Ks10
Niveau 6
Niveau 6
Messages : 282
Enregistré le : mer. 25 avr. 2012 20:38
Status : Hors ligne

Re: [..] Chercher et lire entre balise

#10

Message par Ks10 »

NIQUEL ! ça fonctionne !
Merci & oups pour l'erreur de syntaxe x) Sa aurait du faire tilt dans ma tête mais bon...


Je suis pour les choses assez simple également.
Quand j'ai vu sa :

Code : Tout sélectionner

$res = StringRegExp($txt, '(?s)<mabalise>\s*(.*?)</findemabalise>', 3)
J'avoue que ça ma fait peur lol

Sujet résolue, merci à tous !
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] Chercher et lire entre balise

#11

Message par jchd »

[dernier HS]
Soit dit au passage, _StringBetween emploie trois fois ...
Autrement dit, c'est un string : un cache-sexe très fin qui ne cache pas grand'chose.
[/dernier HS]
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Répondre