[R] Recherher un texte entre des balises
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
[R] Recherher un texte entre des balises
Bonjour,
Je cherche à liste le contenu des GPO d'un AD.
Je dispose d'une liste de fichier xml, dans ces fichiers se trouvent les infos que je recherche insérées entre des balises.
Par exemple pour le nom il faut que je cherche la ligne :
<Name>GPO-Firewall_VNC</Name>
le groupe :
<SOMName>Portables</SOMName>
et ainsi de suite..
Le soucis c'est que ces infos ne sont jamais à la même ligne dans mes fichiers xml.
Je pense qu'il faut que cherche du côté de la fonction "FileRead" pour trouver mes balises, mais après je ne sais pas comment récupérer ce qu'il y a entre.
Pouvez vous me donner une piste ?
Merci
Je cherche à liste le contenu des GPO d'un AD.
Je dispose d'une liste de fichier xml, dans ces fichiers se trouvent les infos que je recherche insérées entre des balises.
Par exemple pour le nom il faut que je cherche la ligne :
<Name>GPO-Firewall_VNC</Name>
le groupe :
<SOMName>Portables</SOMName>
et ainsi de suite..
Le soucis c'est que ces infos ne sont jamais à la même ligne dans mes fichiers xml.
Je pense qu'il faut que cherche du côté de la fonction "FileRead" pour trouver mes balises, mais après je ne sais pas comment récupérer ce qu'il y a entre.
Pouvez vous me donner une piste ?
Merci
Modifié en dernier par guillaume le dim. 14 mars 2010 20:32, modifié 1 fois.
- Narmeke
- Niveau 6

- Messages : 247
- Enregistré le : mer. 28 oct. 2009 11:31
- Localisation : Libourne
- Status : Hors ligne
Re: [..] Recherher un texte entre des balises
Ben remplace les balises pas "" 
Re: [..] Recherher un texte entre des balises
je ne suis pas certain de comprendre
et j'ai déjà beaucoup de "" dans mon fichier.
et j'ai déjà beaucoup de "" dans mon fichier.
- Narmeke
- Niveau 6

- Messages : 247
- Enregistré le : mer. 28 oct. 2009 11:31
- Localisation : Libourne
- Status : Hors ligne
Re: [..] Recherher un texte entre des balises
Voici une fonction que j'ai coder il y a a très peu de temps :
J'espère que cela peut vous aidez ^^
Cordialement Narmeke
Code : Tout sélectionner
Func _DECOMPOSED_CONTACT_LIST()
$FILENAME = @TempDir&"\cl.txt"
$CONTENU_FILENAME = FileRead($FILENAME)
$SEARCH = '<number>'
$REPLACE = ""
$CONTENU_FILENAME = StringReplace($CONTENU_FILENAME, $SEARCH, $REPLACE)
FileDelete($FILENAME)
FileWrite($FILENAME, $CONTENU_FILENAME)
;---
;Suppression du texte après le texte entre balise
;---
$CONTENU_FILENAME = FileRead($FILENAME)
$SEARCH = '</number>'
$REPLACE = ""
$CONTENU_FILENAME = StringReplace($CONTENU_FILENAME, $SEARCH, $REPLACE)
FileDelete($FILENAME)
FileWrite($FILENAME, $CONTENU_FILENAME)
;---
;Suppression des espaces
;---
$CONTENU_FILENAME = FileRead($FILENAME)
$SEARCH = " "
$REPLACE = ""
$CONTENU_FILENAME = StringReplace($CONTENU_FILENAME, $SEARCH, $REPLACE)
FileDelete($FILENAME)
FileWrite($FILENAME, $CONTENU_FILENAME)
EndFunc ;=> _DECOMPOSED_CONTACT_LIST()
Cordialement Narmeke
Re: [..] Recherher un texte entre des balises
ok oui je comprends un peu mieux.
je vais essayer avec cette méthode.
Merci pour votre aide !
je vais essayer avec cette méthode.
Merci pour votre aide !
Re: [..] Recherher un texte entre des balises
Bonsoir,
Sans vouloir faire de l'ombre à "Narmeke"
je te propose le code ci dessous en l'adaptant à tes besoins :
Bonne soirée.
Sans vouloir faire de l'ombre à "Narmeke"
Code : Tout sélectionner
$fichier_xml = FileOpen(@ScriptDir & "\MonFichier.xml")
If $fichier_xml = -1 Then
MsgBox(0, "Erreur", "Impossible d'ouvrir le fichier.")
Exit
EndIf
$search = FileRead($fichier_xml)
FileClose($fichier_xml)
$val1 = StringRegExp($search, "<Name>([^<]+)<\/Name>", 1)
$val2 = StringRegExp($search, "<SOMName>([^<]+)<\/SOMName>", 1)
MsgBox(0, "Résultat", "GPO : " & $val1[0] & @CRLF & "Gatégorie : " & $val2[0])
Re: [..] Recherher un texte entre des balises
whaou merci je n'en attendais pas tant !
Merci beaucoup je vais pouvoir faire mes tests
Merci beaucoup je vais pouvoir faire mes tests
- Narmeke
- Niveau 6

- Messages : 247
- Enregistré le : mer. 28 oct. 2009 11:31
- Localisation : Libourne
- Status : Hors ligne
Re: [R] Recherher un texte entre des balises
Sa marche aussi, c'est même plus court xD
Merci
Merci
Re: [R] Recherher un texte entre des balises
ça fonctionne impec merci.
Par contre je recontre un souci avec certains fichiers xml qui comportent plusieurs balises <Name></Name>
Je n'avais pas pensé à ça, du coup ça me fait un message d'erreur.
Si vous avez idée je suis preneur !
Je vais voir si je peux pas lire le fichier par lignes et creer d'autres variables.
Par contre je recontre un souci avec certains fichiers xml qui comportent plusieurs balises <Name></Name>
Je n'avais pas pensé à ça, du coup ça me fait un message d'erreur.
Si vous avez idée je suis preneur !
Je vais voir si je peux pas lire le fichier par lignes et creer d'autres variables.
Re: [R] Recherher un texte entre des balises
Bonsoir,
Pas de souci, il suffit de modifier le flag de "StringRegExp" en "3", de récupérer le nombre de valeurs à l'aide d'un UBound. Ensuite, à toi de gérer la façon dont tu veux traiter le, les résultats.
En partant de mon premier exemple :
Si souci, n'hésite pas à poster un exemple de ton fichier xml.
Bonne soirée.
Pas de souci, il suffit de modifier le flag de "StringRegExp" en "3", de récupérer le nombre de valeurs à l'aide d'un UBound. Ensuite, à toi de gérer la façon dont tu veux traiter le, les résultats.
En partant de mon premier exemple :
Code : Tout sélectionner
$fichier_xml = FileOpen(@ScriptDir & "\MonFichier.xml")
If $fichier_xml = -1 Then
MsgBox(0, "Erreur", "Impossible d'ouvrir le fichier.")
Exit
EndIf
$search = FileRead($fichier_xml)
FileClose($fichier_xml)
$val1 = _balise("Name")
$val2 = _balise("SOMName")
MsgBox(0, "Résultat", "GPO : " & $val1 & @CRLF & "Catégorie : " & $val2)
Func _balise($attribut)
$val = @CRLF
$myarray = StringRegExp($search, "<" & $attribut & ">([^<]+)<\/" & $attribut & ">", 3)
For $i = 0 To UBound($myarray) - 1
$val &= $myarray[$i] & @CRLF
Next
Return $val
EndFunc
Bonne soirée.
Re: [R] Recherher un texte entre des balises
Merci beaucoup ! je vais mettre tout ça en place.
Re: [R] Recherher un texte entre des balises
J'ai réussi à faire ce que je voulais, merci à vous.
J'essai d'améliorer un peu mon script mais j'ai du mal à comprendre correctement la fonction :
Cette fonction remplit bien son role mais j'ai du mal à bien comprendre son fonctionnement précis. (et j'aime bien comprendre chaque ligne d'un script
)
En fait ce sont surtout les 2 lignes suivantes que je n'arrive pas à traduire :
For $i = 0 To UBound($myarray) - 1
$val &= $myarray[$i] & @CRLF
Comment peut on définir textuellement le role du "&" juste après $val ?
j'ai remarqué que quand je le retire je ne remonte que la dernière valeur de l'array.
Autre question, puis je modifier "For $i = 0 To UBound($myarray) - 1" pour par exemple ne remonter que la première valeur de l'array ? ou une que j'aurais défini en comptant au préalable le nombre total de valeur du tableau.
J'ai essayé de comprendre en lisant la doc, mais ça ne m'a pas beaucoup eclairci !
Désolé si ces questions vous paraissent bêtes.
Si vous pouvez faire quelque chose pour moi je vous en remercie !
J'essai d'améliorer un peu mon script mais j'ai du mal à comprendre correctement la fonction :
Code : Tout sélectionner
Func _balise($attribut)
$val = @CRLF
$myarray = StringRegExp($search, "<" & $attribut & ">([^<]+)<\/" & $attribut & ">", 3)
For $i = 0 To UBound($myarray) - 1
$val &= $myarray[$i] & @CRLF
Next
Return $val
EndFuncEn fait ce sont surtout les 2 lignes suivantes que je n'arrive pas à traduire :
For $i = 0 To UBound($myarray) - 1
$val &= $myarray[$i] & @CRLF
Comment peut on définir textuellement le role du "&" juste après $val ?
j'ai remarqué que quand je le retire je ne remonte que la dernière valeur de l'array.
Autre question, puis je modifier "For $i = 0 To UBound($myarray) - 1" pour par exemple ne remonter que la première valeur de l'array ? ou une que j'aurais défini en comptant au préalable le nombre total de valeur du tableau.
J'ai essayé de comprendre en lisant la doc, mais ça ne m'a pas beaucoup eclairci !
Désolé si ces questions vous paraissent bêtes.
Si vous pouvez faire quelque chose pour moi je vous en remercie !
- bloodwolff
- Membre émérite

- Messages : 655
- Enregistré le : ven. 18 avr. 2008 22:36
- Localisation : Québec
- Status : Hors ligne
Re: [R] Recherher un texte entre des balises
For $i = 0 To : C'est simplement une boucle For standard donc je doute que plus d'information sont nécessaireguillaume a écrit : For $i = 0 To UBound($myarray) - 1
$val &= $myarray[$i] & @CRLF
UBound() : Cette fonction sert à connaître les dimensions d'un tableau ou en d'autre mot le nombre d'élément qu'il contient ou plus précisement dans notre cas le nombre de balises qu'il a trouver
- 1 C'est une simple soustraction, car contrairement à une grande part des fonctions autoit les expressions régulières ne retourne pas le nombre d'élément dans l'index [0]. Nous devons simplement soustraire 1 car nous devons prendre en considération cette élément [0]. Par exemple un tableau de 3 élément se lira comme suit
$myarray[0] = premier élément
$myarray[1] = deuxième élément
$myarray[2] = troisième élément
Le tableau contient donc 3 élément mais tenter un tableau[3] résultera d'une erreur
$val &= C'est l'équivalent de "$val = $val &" donc cela ne qu'ajouter du texte à la suite du précédent
& @CRLF C'est un simple retour chariot, en résumé cela change de ligne
Relis plus haut dans mon message tu y trouveras ta joieAutre question, puis je modifier "For $i = 0 To UBound($myarray) - 1" pour par exemple ne remonter que la première valeur de l'array ?
Compte skype : bloodwolfff


