[R] RegExp : apostrophe non reconnu dans une chaine

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
OldChapZ
Niveau 1
Niveau 1
Messages : 6
Enregistré le : lun. 15 sept. 2008 13:02
Status : Hors ligne

[R] RegExp : apostrophe non reconnu dans une chaine

#1

Message 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é.
Fichiers joints
Nouveau.txt
(14.64 Kio) Téléchargé 47 fois
Modifié en dernier par OldChapZ le ven. 17 déc. 2010 18:18, modifié 1 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#2

Message 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:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
OldChapZ
Niveau 1
Niveau 1
Messages : 6
Enregistré le : lun. 15 sept. 2008 13:02
Status : Hors ligne

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

#3

Message 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.
OldChapZ
Niveau 1
Niveau 1
Messages : 6
Enregistré le : lun. 15 sept. 2008 13:02
Status : Hors ligne

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

#4

Message 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.
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

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

#5

Message 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
 
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
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: [R] RegExp : apostrophe non reconnu dans une chaine

#6

Message 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_ ?"
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Répondre