[R] Extraire du texte entre 2 citations

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
fab84
Niveau 1
Niveau 1
Messages : 11
Enregistré le : mar. 20 août 2013 09:25
Status : Hors ligne

[R] Extraire du texte entre 2 citations

#1

Message 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.
Modifié en dernier par fab84 le mer. 28 sept. 2022 07:47, modifié 1 fois.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2511
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

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

#2

Message 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)
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
fab84
Niveau 1
Niveau 1
Messages : 11
Enregistré le : mar. 20 août 2013 09:25
Status : Hors ligne

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

#3

Message 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
Avatar du membre
mikell
Modérateur
Modérateur
Messages : 6217
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#4

Message 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
" 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
jguinch
Modérateur
Modérateur
Messages : 2511
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

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

#5

Message 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)
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
fab84
Niveau 1
Niveau 1
Messages : 11
Enregistré le : mar. 20 août 2013 09:25
Status : Hors ligne

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

#6

Message 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
Avatar du membre
mikell
Modérateur
Modérateur
Messages : 6217
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#7

Message par mikell »

Bin où elle est la pièce jointe ?
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
fab84
Niveau 1
Niveau 1
Messages : 11
Enregistré le : mar. 20 août 2013 09:25
Status : Hors ligne

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

#8

Message par fab84 »

J'ai oublié la pJ désolé.
fab84
Niveau 1
Niveau 1
Messages : 11
Enregistré le : mar. 20 août 2013 09:25
Status : Hors ligne

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

#9

Message par fab84 »

J'ai l'impression que ma PJ ne se charge pas... J'ai l'impression d'être un boulet :)
fab84
Niveau 1
Niveau 1
Messages : 11
Enregistré le : mar. 20 août 2013 09:25
Status : Hors ligne

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

#10

Message par fab84 »

Au cas où elle ne soit pas en PJ voici un lien smash : https://fromsmash.com/9r3Z_XDmPF-ct
Avatar du membre
mikell
Modérateur
Modérateur
Messages : 6217
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#11

Message 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)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
fab84
Niveau 1
Niveau 1
Messages : 11
Enregistré le : mar. 20 août 2013 09:25
Status : Hors ligne

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

#12

Message 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)
Avatar du membre
mikell
Modérateur
Modérateur
Messages : 6217
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#13

Message 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)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
fab84
Niveau 1
Niveau 1
Messages : 11
Enregistré le : mar. 20 août 2013 09:25
Status : Hors ligne

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

#14

Message 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.
Répondre