Page 1 sur 1

[R] Traitement string

Posté : mer. 24 nov. 2010 21:39
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??

Re: [..] Traitement string

Posté : mer. 24 nov. 2010 22:00
par sylvanie
si c'est une histoire d'espace, essayez ceci pour le dernier traîtement :

Code : Tout sélectionner

 $traitement4 = StringRegExpReplace( $traitement3, "Ã\s+", "à" )
 

Re: [..] Traitement string

Posté : mer. 24 nov. 2010 22:11
par cutprod
Merci beaucoup, cela marche très bien!!
Pouvez vous m'expliquer le \s+

Re: [..] Traitement string

Posté : mer. 24 nov. 2010 22:22
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.

Re: [..] Traitement string

Posté : mer. 24 nov. 2010 22:39
par L4crymal
Tout est une question de codage, peux tu nous fournir la page en question stp?

Re: [..] Traitement string

Posté : mer. 24 nov. 2010 22:43
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:

Re: [..] Traitement string

Posté : mer. 24 nov. 2010 22:45
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

Re: [..] Traitement string

Posté : mer. 24 nov. 2010 22:48
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)
 

Re: [..] Traitement string

Posté : mer. 24 nov. 2010 23:29
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!!

Re: [..] Traitement string

Posté : jeu. 25 nov. 2010 01:07
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]

Re: [..] Traitement string

Posté : jeu. 25 nov. 2010 06:47
par cutprod
Je vous remercie de cette courte, mais instructive leçon.
Je vais m'efforcer de l'appliquer.