Page 1 sur 1

[R] Extraire du texte entre 2 citations

Posté : dim. 25 sept. 2022 16:03
par fab84
Bonjour,
je cherche comment créer un script qui me permettrait d'extraire d'un gros fichier texte plusieurs séquences de texte qui sont toujours entourées des mêmes citations.
Je ne peux pas vous mettre le code exact à cause de la confidentialité mais l'idée serait par exemple si je prends le code source cette page que je copie dans un fichier texte :

"
<option value="java" class="code_etx_java" title="Java">JAVA (Java)</option>
<option value="java5" class="code_etx_java" title="Java 5">JAVA (Java 5)</option>
<option value="javascript" class="code_etx_js" title="JavaScript">JS (JavaScript)</option>
bla bla blablabla
<option value="jquery" class="code_etx_js" title="jQuery">JS (jQuery)</option>
"

Dans cet exemple j'aimerai extraire tout ce qui est marqué entre "<option value=" et "</option>" en vouclant dans l'intégralité du fichier texte.

J'espère que mon explication est claire, sinon j'essaierai de faire mieux :)
Merci d'avance pour votre aide.

Re: [..] Extraire du texte entre 2 citations

Posté : dim. 25 sept. 2022 17:58
par jguinch
Bonjour
Le plus court est de passer par la fonction StringRegExp :
#Include <Array.au3>

Local $sHtml = '<option value="java" class="code_etx_java" title="Java">JAVA (Java)</option>' & @CRLF & _
'<option value="java5" class="code_etx_java" title="Java 5">JAVA (Java 5)</option>' & @CRLF & _
'<option value="javascript" class="code_etx_js" title="JavaScript">JS (JavaScript)</option>' & @CRLF & _
'bla bla blablabla' & @CRLF & _
'<option value="jquery" class="code_etx_js" title="jQuery">JS (jQuery)</option>'


Local $aExtract = StringRegExp($sHtml, "(?i)<option value=.+?>(.+?)</option>", 3)
_ArrayDisplay($aExtract)

Re: [..] Extraire du texte entre 2 citations

Posté : lun. 26 sept. 2022 15:23
par fab84
Merci beaucoup pour cette réponse rapide.
Malheureusement quand j'essaie j'ai un message d'erreur "Unterminated string"
J'ai essayé de supprimer les apostrophes pensant que ça venait de là mais ça ne change rien.
Y'a til quelque chose que j'ai raté?
Ps : le fichier que je teste fait 145 132 caractères, 21434 mots, 120 lignes

Re: [..] Extraire du texte entre 2 citations

Posté : lun. 26 sept. 2022 18:27
par mikell
Bizarre le code de jguinch devrait marcher...
Peut-être avec cette variante ?

Code : Tout sélectionner

Local $aExtract = StringRegExp($sHtml, "(?i)<option value=[^>]+>([^<]+)</option>", 3)
Sinon tu peux poster le fichier texte et on verra Image

Re: [..] Extraire du texte entre 2 citations

Posté : lun. 26 sept. 2022 21:17
par jguinch
Sinon, simplement charger le fichier dans une variable :
#Include <Array.au3>

Local $sHtml = FileRead("fichierquicontientlesdonnees.txt")


Local $aExtract = StringRegExp($sHtml, "(?i)<option value=.+?>(.+?)</option>", 3)
_ArrayDisplay($aExtract)

Re: [..] Extraire du texte entre 2 citations

Posté : mar. 27 sept. 2022 15:04
par fab84
Ecore merci pour votre aide. Je n'y arrive toujours pas.
Je ne peux pas mettre le fichier mais je vous mets en pj un exemple de fichier de la même structure. C'est le code source de la page d'accueil du site météo france.

J'essaie pour cet exemple d'extraire ce qui est entre "previsions-meteo-france" et "icon".
ça ne marche pas non plus... Peut être ça vient du formatage du fichier texte?

J'ai essayé de charger le fichier texte en variable et aussi le code de mikell

Re: [..] Extraire du texte entre 2 citations

Posté : mar. 27 sept. 2022 15:28
par mikell
Bin où elle est la pièce jointe ?

Re: [..] Extraire du texte entre 2 citations

Posté : mar. 27 sept. 2022 15:30
par fab84
J'ai oublié la pJ désolé.

Re: [..] Extraire du texte entre 2 citations

Posté : mar. 27 sept. 2022 15:33
par fab84
J'ai l'impression que ma PJ ne se charge pas... J'ai l'impression d'être un boulet :)

Re: [..] Extraire du texte entre 2 citations

Posté : mar. 27 sept. 2022 15:35
par fab84
Au cas où elle ne soit pas en PJ voici un lien smash : https://fromsmash.com/9r3Z_XDmPF-ct

Re: [..] Extraire du texte entre 2 citations

Posté : mar. 27 sept. 2022 15:41
par mikell
Je viens de tester le code de jguinch sur ton fichier et ça marche
Si on essaie d'extraire ce qui est entre "previsions-meteo-france" et "icon" ça marche aussi

Code : Tout sélectionner

Local $aExtract = StringRegExp($sHtml, "(?i)previsions-meteo-france(.+?)icon", 3)

Re: [..] Extraire du texte entre 2 citations

Posté : mar. 27 sept. 2022 15:50
par fab84
Merciii!!
Merci pour votre aide ça fonctionne. Mon erreur je pense était que dans la 2éme partie de mots que je cherchais il y'a des parenthèses, par exemple "prevision (meteo)". En prenant un autre mot qui n'est pas entre parenthèse ça fonctionne :)

Un petit complément, pour écrire ça dans un fichier texte comment gérer la fonction filewrite dans ce cas?
FileWrite("C:\resultat.txt", $aExtract)

Re: [..] Extraire du texte entre 2 citations

Posté : mar. 27 sept. 2022 16:00
par mikell
Dans les regex les parenthèses sont des caractères spéciaux, il faut les "échapper" avec un "\"

Le code retourne un tableau, il faut le convertir en string avant de l'écrire
En reprenant l'exemple précédent :

#Include <Array.au3>

Local $sHtml = FileRead("exemple.txt")

;Local $aExtract = StringRegExp($sHtml, "(?i)<option value=.+?>(.+?)</option>", 3)
Local $aExtract = StringRegExp($sHtml, "(?i)previsions-meteo-france(.+?)icon", 3)
;_ArrayDisplay($aExtract)

$txt = _ArrayToString($aExtract, @crlf)
FileWrite("result.txt", $txt)

Re: [..] Extraire du texte entre 2 citations

Posté : mer. 28 sept. 2022 07:46
par fab84
Un très très grand merci ça fonctionne parfaitement comme je le souhaitais.
Vous allez me faire gagner un temps fou...
Encore merci pour votre réactivité et votre aide.