[R] Traitement string

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
cutprod
Niveau 6
Niveau 6
Messages : 273
Enregistré le : jeu. 30 sept. 2010 17:25
Localisation : Sud Ouest
Status : Hors ligne

[R] Traitement string

#1

Message par cutprod »

Bonjour a tous, je bataille sur une fonction qui doit me nettoyer une chaine de caractère pour la rendre compatible a une fonction : "StringInStr"
Malheureusement l'extraction html nous donne une variable de cette sorte =
"Nouvelle mise à jour dans Picasa"
ou encore =
"Lettre d'info de l'énergie solaire"

Pour la mettre au "propre" je me suis fais =

Code : Tout sélectionner

Func traitement()
    $texte_a_traiter = GUICtrlRead($Input1)
    $traitement1 = StringReplace ( $texte_a_traiter, "'", "'" )
    $traitement2 = StringReplace ( $traitement1, "è", "è" )
    $traitement3 = StringReplace ( $traitement2, "é", "é" )
    $traitement4 = StringReplace( $traitement3, "Ã ", "à" )
    GUICtrlSetData($Input2,$traitement4)
EndFunc
 
ca fonctionne très bien sauf pour le dernier "traitement", il y a un espace après le à que le srcipt refuse de prendre en compte(je doit remplacer "à "par "à").Et si je traite ma variable la phrase me sort avec un espace en trop donc ne trouve plus sa "jumelle" dans le texte a analyser!!
Un peu d'aide??
Modifié en dernier par cutprod le jeu. 25 nov. 2010 07:07, modifié 1 fois.
Cut, srcipteur du dimanche...désolé !-)
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] Traitement string

#2

Message par sylvanie »

si c'est une histoire d'espace, essayez ceci pour le dernier traîtement :

Code : Tout sélectionner

 $traitement4 = StringRegExpReplace( $traitement3, "Ã\s+", "à" )
 
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
Avatar du membre
cutprod
Niveau 6
Niveau 6
Messages : 273
Enregistré le : jeu. 30 sept. 2010 17:25
Localisation : Sud Ouest
Status : Hors ligne

Re: [..] Traitement string

#3

Message par cutprod »

Merci beaucoup, cela marche très bien!!
Pouvez vous m'expliquer le \s+
Cut, srcipteur du dimanche...désolé !-)
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] Traitement string

#4

Message par sylvanie »

dans les expressions régulière, \s désigne les caractères espace,tab et \r. Le fait de mettre "+" indique une recherche sur 1 ou plusieurs éléments de ce type
ainsi ça peut matcher plusieurs espaces consécutifs, un mixe d'espaces et de tabs, etc.
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
Avatar du membre
L4crymal
Niveau 8
Niveau 8
Messages : 513
Enregistré le : mer. 24 sept. 2008 14:53
Status : Hors ligne

Re: [..] Traitement string

#5

Message par L4crymal »

Tout est une question de codage, peux tu nous fournir la page en question stp?
Avatar du membre
cutprod
Niveau 6
Niveau 6
Messages : 273
Enregistré le : jeu. 30 sept. 2010 17:25
Localisation : Sud Ouest
Status : Hors ligne

Re: [..] Traitement string

#6

Message par cutprod »

OK!, a cause de mon faible niveau en anglais, je n'avais pas bien assimiler la fonction "StringRegExpReplace"
Je m'étais orienter plus vers :
$traitement4 = StringReplace( $traitement3, "ÃChr(32)", "à" ).
Merci de m'avoir "réorienter" voir carrément "mis le nez dedans"!! :lol:
Cut, srcipteur du dimanche...désolé !-)
Avatar du membre
cutprod
Niveau 6
Niveau 6
Messages : 273
Enregistré le : jeu. 30 sept. 2010 17:25
Localisation : Sud Ouest
Status : Hors ligne

Re: [..] Traitement string

#7

Message par cutprod »

la page en question est "dynamique", c'est le contenu "inputbox" de ta boite Gmail.
C'est en rapport avec ce topic :
http://autoitscript.fr/forum/viewtopic.php?f=3&t=6262
Cut, srcipteur du dimanche...désolé !-)
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: [..] Traitement string

#8

Message par jchd »

En règle générale donc sauf exception flagrante, toute séquence ressemblant peu ou prou à é (é) ’ (apostrophe française Unicode) etc dénote une interprétation en ASCII d'une séquence UTF-8 (représentation sur plusieurs octets d'un point de code [=caractère] Unicode).

Maintenant --et c'est un tout autre sujet-- des séquences comme ' correspondent à la représentation en HTML et consort de points de codes Unicode.

Voici un exemple de traitement de ces séquences-là avec des caractères clairement non-ASCII (mais le traitement est le même avec des caractères plus courants) :

Code : Tout sélectionner

Local $s = 'Unicode html string with some fractional ((2n+1)/8) html codepoints ⅛=1/8 ⅜=3/8 ⅝=5/8 ⅞=7/8'
$s = Execute('"' & StringRegexpReplace($s, "&#(\d+);", '"&chrw($1)&"') & '"')
MsgBox(0, "Html Unicode test", $s & @LF)
 
Modifié en dernier par jchd le jeu. 25 nov. 2010 00:58, modifié 1 fois.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
cutprod
Niveau 6
Niveau 6
Messages : 273
Enregistré le : jeu. 30 sept. 2010 17:25
Localisation : Sud Ouest
Status : Hors ligne

Re: [..] Traitement string

#9

Message par cutprod »

Ha ok et c'est mieux que :

Code : Tout sélectionner

Func traitement()
    $texte_a_traiter = GUICtrlRead($Input1)
    $traitement1 = StringReplace ( $texte_a_traiter, "'", "'" )
    $traitement2 = StringReplace ( $traitement1, "è", "è" )
    $traitement3 = StringReplace ( $traitement2, "é", "é" )
    $traitement4 = StringRegExpReplace( $traitement3, "Ã\s+", "à " )
    $texte_ok = GUICtrlSetData($Input2,$traitement4)
EndFunc
Parce que si oui, je veux bien quelques explication sur la mise en œuvre de votre bout de code, parce-que la vous m'avez un peu lâchez!!
Cut, srcipteur du dimanche...désolé !-)
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: [..] Traitement string

#10

Message par jchd »

Alors et rapidement car je manque horriblement de temps :

Pour résoudre la question des $str = StringReplace ( $str, "é", "é" ) et autres joyeusetés, le plus simple quand l'entrée est un fichier, est de lire le fichier d'entrée en mode UTF-8 (voir aide de FileOpen : mode = 256 positionné). Ce qui m'étonne énormément, c'est de trouver de l'UTF-8 dans un contrôle !!! Le contenu de ce contrôle ne provient-il pas de la lecture d'un fichier (en mode ASCII au lieu de UTF-8) ? En l'occurence, n'est-il pas possible de récupérer le source html sous encodage UTF-16le (compatible avec AutoIt) directement ?

Ensuite, pour les séquences html décimales (du genre ⅛) il faut bêtement appliquer la recette donnée :
$s = Execute('"' & StringRegexpReplace($s, "&#(\d+);", '"&chrw($1)&"') & '"')
Sauf à tomber sur un auteur vicieux (ou un texte d'aide précisément sur ces séquences !), je crois qu'on peut appliquer ceci à l'intégralité du fichier (ou variable) d'entrée, lu d'un seul bloc dans $s.

[1000 pardons, j'avais laissé en place une fonction parasite dans l'exemple, qui n'a rien à voir avec notre sujet]
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
cutprod
Niveau 6
Niveau 6
Messages : 273
Enregistré le : jeu. 30 sept. 2010 17:25
Localisation : Sud Ouest
Status : Hors ligne

Re: [..] Traitement string

#11

Message par cutprod »

Je vous remercie de cette courte, mais instructive leçon.
Je vais m'efforcer de l'appliquer.
Cut, srcipteur du dimanche...désolé !-)
Répondre