[R] Récupérer Retours Chariots d'un edit

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
aulus
Niveau 7
Niveau 7
Messages : 424
Enregistré le : lun. 25 mars 2013 19:38
Status : Hors ligne

[R] Récupérer Retours Chariots d'un edit

#1

Message par aulus »

Bonjour et tous mes voeux de bonne et heureuse année 2014 à toute l'équipe du forum, en particulier à ceux ou celles qui prennent de leur temps pour dépanner les amateurs comme moi.

Je souhaite récupérer le contenu d'un Edit, y compris les retours chariot, pour impression ultérieure. Est-ce possible directement, sans enregistrer préalablement le contenu dans un fichier, puis lire ce fichier ligne par ligne ?

Je vous remercie de vos conseils.
Modifié en dernier par aulus le sam. 04 janv. 2014 11:59, modifié 1 fois.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] récupérer Retours Chariots d'un edit

#2

Message par jguinch »

Comme ça ?

Code : Tout sélectionner

$text = GUIctrlRead($myEdit)
$aText = StringRegExp($text, "(?m)^(.*)$", 3)
For $i = 0 To UBound($aText) - 1
    MsgBox(0, "", "Line " & $i + 1 & " : " & $aText[$i] )
Next
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
aulus
Niveau 7
Niveau 7
Messages : 424
Enregistré le : lun. 25 mars 2013 19:38
Status : Hors ligne

Re: [..] récupérer Retours Chariots d'un edit

#3

Message par aulus »

C'est exactement ce que j'espérais... Divines expressions régulières, quand vous soumettrez-vous à ma médiocre intelligence ?

Grand merci Jguinch.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] récupérer Retours Chariots d'un edit

#4

Message par jguinch »

Libre à toi d'apprendre, c'est pas si compliqué...
En plus, il n'y avait pas forcément besoin d'un expression régulière, on aurait pu utiliser StringSplit :
$aText = StringSplit($text, chr(13))

N'oublie pas de passer ton sujet en [R]
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
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] Récupérer Retours Chariots d'un edit

#5

Message par jchd »

Le problème avec

Code : Tout sélectionner

$aText = StringSplit($text, chr(13))
est que la scission s'effectue exclusivement sur le caractère spécifié (CR).

Du coup, si la chaîne comprend plusieurs lignes "à la Microsoft" (délimitées par CRLF), on se retrouve avec des LF en tête des chaînes intermédiaires (donc pas toutes), qui pourront perturber un traitement individuel. Certes tel n'est pas le cas ici, mais ma remarque porte sur un cas plus général.

Découper avec CRLF ne fonctionnera pas avec une chaîne utilisant CR ou LF seul.

En fait, une regexp ave \R marche dans tous les cas, du moins avec la dernière version, car ses regexps utilisent par défaut (*ANYCRLF).
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
aulus
Niveau 7
Niveau 7
Messages : 424
Enregistré le : lun. 25 mars 2013 19:38
Status : Hors ligne

Re: [R] Récupérer Retours Chariots d'un edit

#6

Message par aulus »

J'ai opté pour l'expression régulière. Merci pour ces précisions qu'il est bon de connaître.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R] Récupérer Retours Chariots d'un edit

#7

Message par mikell »

En effet !
Parce que si tu veux récupérer aussi les lignes vides (d'espacement entre 2 paragraphes, par exemple) il faut adapter le regex de jguinch

Code : Tout sélectionner

StringRegExp($text, '(?m)^(.+|\s+)$', 3)
ou appliquer le conseil de jchd

Code : Tout sélectionner

StringRegExp($text, '(*BSR_ANYCRLF)(.*)\R|\z', 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 )
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] Récupérer Retours Chariots d'un edit

#8

Message par jchd »

Oui, j'ai pris un raccourci saisissant. Je voulais dire que (*BSR_ANYCRLF) est actif par défaut maintenant, de même que (*ANYCRLF).
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [R] Récupérer Retours Chariots d'un edit

#9

Message par jguinch »

@mikell : j'ai essayé tes propositions, mais je ne comprends pas trop le comportement :
- avec StringRegExp($text, '(?m)^(.+|\s+)$', 3), il n'y a pas tous les retours à la ligne
- avec StringRegExp($text, '(*BSR_ANYCRLF)(.*)\R|\z', 3), il n'y a pas le contenu de la dernière ligne.
Si par contre on fait StringRegExp($text, '(.*)(?:\R|\z)', 3), c'est OK mais le résultat retourne une ligne vide à la fin.

C'est peut-être du pas grand chose, mais j'aime bien essayer de comprendre (mais là...)
A+
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R] Récupérer Retours Chariots d'un edit

#10

Message par mikell »

Oui c'est assez tordu, le résultat dépend de ce qu'on teste et de la présence ou non d'une dernière ligne vide (ou plusieurs)
Je me suis penché là-dessus quand j'ai vu dans un post de guiness sur le forum US que Notepad++ donnait $GUI_WS_EX_PARENTDRAG à la ligne 99 dans l'include GuiConstantsEx alors que Scite le donne à la ligne 97, or je me suis fait un petit script de recherche de constante dans les includes qui doit me retourner un n° de ligne juste
J'ai donc fait les tests sur des includes
► Afficher le texte
Mais je n'ai pas testé un GuiCtrlRead d'edit
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
aulus
Niveau 7
Niveau 7
Messages : 424
Enregistré le : lun. 25 mars 2013 19:38
Status : Hors ligne

Re: [R] Récupérer Retours Chariots d'un edit

#11

Message par aulus »

L'expression de Jguinch - $aText = StringRegExp($text, "(?m)^(.*)$", 3) - récupère les lignes vides.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R] Récupérer Retours Chariots d'un edit

#12

Message par mikell »

Oh oui... d'ailleurs avec le test sur WindowsConstants.au3 elle en récupère même 48 en rab ^^
jguinch a écrit :avec StringRegExp($text, '(*BSR_ANYCRLF)(.*)\R|\z', 3), il n'y a pas le contenu de la dernière ligne.
Oui, quand le texte lu n'a pas de \R à la dernière ligne, c'est ça que je pige pas, \z devrait marcher
Et avec '(*BSR_ANYCRLF)(.*)\R?' on a la ligne vide en trop 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 )
aulus
Niveau 7
Niveau 7
Messages : 424
Enregistré le : lun. 25 mars 2013 19:38
Status : Hors ligne

Re: [R] Récupérer Retours Chariots d'un edit

#13

Message par aulus »

mikell a écrit :Oh oui... d'ailleurs avec le test sur WindowsConstants.au3 elle en récupère même 48 en rab ^^
J'ai résolu le pb avec StringStripWS(GUICtrlRead($Edit1),3)
lesolutionneur
Niveau 7
Niveau 7
Messages : 368
Enregistré le : ven. 09 déc. 2011 11:25
Status : Hors ligne

Re: [R] Récupérer Retours Chariots d'un edit

#14

Message par lesolutionneur »

Ils me semble que les expressions régulières sont largement plus lentes que les fonctions natives comme StringSplit().
Attention pour les très long textes !
Modifié en dernier par lesolutionneur le mar. 07 janv. 2014 13:24, modifié 1 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Récupérer Retours Chariots d'un edit

#15

Message par Tlem »

@lesolutionneur
Vous devriez tester avant d'avancer certaines choses.

Chez moi, sur un fichier de 75mo, StringRegExp() met une seconde de moins que StringSplit() pour me donner le résultat ! :mrgreen:
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é".
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R] Récupérer Retours Chariots d'un edit

#16

Message par mikell »

@aulus
L'expression dédouble toutes les lignes vides du texte, le problème ne peut pas être résolu par un simple StringStripWS(...,3)

@lesolutionneur
Je serais curieux de savoir comment fonctionne le moteur de StringSplit...
Et il y a certainement une raison au fait que beaucoup d'UDF intégrées soient réécrites avec des regex
Exemple (puisque c'est pile dans le sujet et que je transpire dessus en ce moment) :
► Afficher le texte_FileCountLines ancienne version
► Afficher le texte_FileCountLines nouvelle version
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
lesolutionneur
Niveau 7
Niveau 7
Messages : 368
Enregistré le : ven. 09 déc. 2011 11:25
Status : Hors ligne

Re: [R] Récupérer Retours Chariots d'un edit

#17

Message par lesolutionneur »

C'est pour ça que j'ai utilisé "il me semble". Dans tous les langages dignes de ce nom, ça fonctionne ainsi. Alors pourquoi l'AutoIt ne respecte pas cette règle ? Pour la même raison que les autres inconvénients qui le placent derrière les autres langages.
Répondre