Page 1 sur 1

[R] RegExp : apostrophe non reconnu dans une chaine

Posté : ven. 17 déc. 2010 16:04
par OldChapZ
J'ai un fichier de plusieurs blocs de structure identique que je veux mettre à jour par bloc. Dans mon éditeur habituel (EditPad), j'utilise une Regexp du type (?s)DébutBlocId.*?^$ qui sélectionne le bloc et s'arrête à la ligne vide de fin du bloc.

Dans AutoIt, la même Regexp ne sélectionne pas le bloc. Après recherche (longue, très longue :evil: ), j'ai fini par déterminer que l'expression génère une erreur à la rencontre de l'apostrophe comprise dans mon fichier.

Quelqu'un a déjà vu ça ? Trouvé une solution ou un palliatif ?

Je n'ose pas mettre mon fichier sur le forum (encombrement). Je le mets en fichier joint avec le code. Je peux le mettre dans une section Code si vous préférez.

Merci d'avance pour l'aide car là, je sèche... :(

EDIT 17/12 18h10
Désolé, le problème ne vient pas de Regexp mais de l'affichage de la chaîne avec apostrophe. Avec un StringReplace($aR[0], "'","!") je peux afficher avec ConsoleWrite. Curieusement pas avec _DebugOut :?: :shock: :?:

Je passe en [Résolu]. Désolé pour ceux qui ont cherché.

Re: [...] RegExp : apostrophe non reconnu dans une chaine

Posté : ven. 17 déc. 2010 18:16
par Tlem
J'ai jeté un oeil sur votre demande, mais comme je ne comprend pas tout, je laisse les pros de la RegExp vous aider dans vos recherches. :wink:

Re: [...] RegExp : apostrophe non reconnu dans une chaine

Posté : ven. 17 déc. 2010 18:20
par OldChapZ
Tlem a écrit :J'ai jeté un oeil sur votre demande
Oui, je vous avais vu sur le topic. Merci et désolé d'avoir [mal] posé la question.

Re: [R] RegExp : apostrophe non reconnu dans une chaine

Posté : ven. 17 déc. 2010 19:37
par OldChapZ
C'était pas si simple. Je n'arrive toujours pas à "arrêter" la regexp sur la ligne vide. J'ai testé "^$" (le plus logique), "\r\n\r\n" et même "(?:\x0D\x0A){2}.

J'ai résolu mon problème avec
$aR = StringRegExp($sOldVrt, "(?s)(O;Track;Z\+" & $Nom & ".*?)O;Track;", 1) qui s'arrête (sans le capturer) sur le début du bloc suivant. Pour capturer le dernier bloc qui n'a pas de suivant, j'ai ajouté un début de bloc à la fin de ma chaîne.

Pas élégant mais efficace. :wink:

Rectification : _DebugOut affiche bien la chaîne expurgée d'apostrophes.

Re: [R] RegExp : apostrophe non reconnu dans une chaine

Posté : ven. 17 déc. 2010 22:40
par sylvanie
Bonsoir.
Pour le découpage par bloc, il est vrai que c'est toujours un peu tendu avec Autoit. Personnellement je ferai ainsi pour isoler les blocs :

Code : Tout sélectionner

$file=@ScriptDir&"\blocs.txt"

$contenu=FileRead($file)

$nOffset = 1
$i=1
While 1
    $tab_bloc=StringRegExp($contenu,"(?:[^\x0d\x0a]+\x0d\x0a)+\x0d\x0a",1,$nOffset)
    If @error = 0 Then
        $nOffset = @extended
    Else
        ExitLoop
    EndIf
        ConsoleWrite("RegExp block - "&$i&@CRLF&$tab_bloc[0])
        $i+=1
WEnd
 

Re: [R] RegExp : apostrophe non reconnu dans une chaine

Posté : sam. 18 déc. 2010 15:24
par jchd
La documentation complète de PCRE se trouve ici et ici. Il y a des options pour contrôler ce que PCRE doit considérer comme une fin de ligne (LF, CR, CRLF) et moulte autres subtilités qui ne sont pas détaillées dans l'aide d'AutoIt sour StringRegExp.
Attention touefois, PCRE évolue (Philip Hazel --pourtant à la retraite-- vient de "lâcher" la version 8.11 et prépare quelques bugfixes pour la 8.12, à sortir sous peu) alors que la version incluse dans AutoIt date de quelque temps déjà. Les différences portent essentiellement sur des fonctionalités vraiment avances ou des fixes dans des cas tortueux, donc sans incidence pour un emploi élémentaire (il n'y a aucune connotation péjorative dans ce terme).

Ma question serait déjà : "Que veux-tu faire _exactement_ ?"