[Résolu][Basic] Récupérer la chaîne trouvée avec Regex

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
forumateur
Membre lOOyal
Membre lOOyal
Messages : 28
Inscription : 10 nov. 2008 23:28

[Résolu][Basic] Récupérer la chaîne trouvée avec Regex

Message par forumateur »

Bonjour,
Je suis nouveau dans les macros en basic, et je cherche à remplacer dans un texte en anglais les occurences de "tri" isolé (ces trois lettres n'étant pas dans un mot), pour que la lecture en text-to-speech donne en résultat vocal "tree" et non "try".
Il me manque une ligne dans la macro ci-dessous, celle qui permet de conserver le caractère avant l'occurence + la substitution ("tree") + le caractère après l'occurence (par exemple si " tri." obtenir " tree.") :

Code : Tout sélectionner

Sub replace_with_regex
  Dim document As Object
  Dim replace As Object

  pattern = "[^a-z]tri[^a-z]"
  document = ThisComponent rem .CurrentController.Frame
  Replace = document.createReplaceDescriptor
  replace.SearchRegularExpression = True
  replace.SearchString = pattern
??????????????????????
  document.replaceAll(replace)

  MsgBox("Done")
End Sub
Quelqu'un peut-il m'aider ?
Merci d'avance...

La modération vous a écrit: Pour faciliter la lecture, code mis entre balises par le modérateur.

Dernière modification par forumateur le 13 juin 2019 15:39, modifié 4 fois.
LibreOffice 6.1 sous Windows 10
(LibreOffice 6.1 par choix)
forumateur
Membre lOOyal
Membre lOOyal
Messages : 28
Inscription : 10 nov. 2008 23:28

Re: Replace avec Regex en basic

Message par forumateur »

Autre manière de poser la question : dans une recherche avec expression régulière, comment "récupérer" la chaine trouvée ?
Merci
LibreOffice 6.1 sous Windows 10
(LibreOffice 6.1 par choix)
Avatar de l’utilisateur
micmac
RespOOnsable forum
RespOOnsable forum
Messages : 9249
Inscription : 28 août 2010 08:45

Re: [Writer] Récupérer la chaine trouvée avec Regex

Message par micmac »

Bonjour et bienvenue sur le forum,

Cette section a des règles très précises que vous devez obligatoirement suivre pour obtenir de l'aide. C'est indiqué dans le cadre rouge en haut de la page.
Il est demandé aux auteurs de faire précéder le titre de leur question d'une balise adéquate. Ce balisage est extrêmement important car il permet d'avoir une base de connaissance optimum en cas de recherche.
Avez-vous remarqué comment étaient postées les autres questions ?

Lisez ce fil pour savoir quelle balise utiliser : https://forum.openoffice.org/fr/forum/s ... html#27295

N'oubliez pas que les termes Macro, OpenOffice ne doivent pas être employés car il sont implicites. Essayez de synthétiser au mieux ce que vous cherchez à faire.

Un titre accrocheur vous permettra d'une part d'être aidé plus rapidement et d'autre part, d'enrichir notre base de connaissances.

Nous l'avons fait pour vous cette fois-ci mais lors de votre prochaine question, nous vous remercions de le faire vous-même au risque de voir votre sujet verrouillé.
Dans votre signature il y a écrit : OpenOffice 3.0 sous Windows XP
Votre signature fait mention d'une version de OpenOffice qui n'est plus maintenue.
Est-ce une erreur, un oubli, un choix, une obligation ?
Dans ce dernier cas, mentionnez-le dans votre signature par Obligation de version.

Pour connaître la version que vous possédez : https://forum.openoffice.org/fr/forum/v ... 582#p11582

Afin de profiter des dernières améliorations, il est fortement recommandé d'être à jour de la dernière version.

Dans votre signature il est nécessaire d'indiquer :
1- La version exacte de AOO ou LibO (AOO 4.1.6, LibO 6.1.6 par exemple) ;
2- La version exacte du système d'exploitation (Windows XP SP3, Vista SP2, Windows 7 SP1, Win 8.1, Win 10, Ubuntu 18.04, mac OS 10.14.5 par exemple).
Accès direct à votre signature pour la corriger.

Cordialement.
Touche Ctrl de Windows = touche cmd⌘ sur Mac
Outils > Options sur Windows = OpenOffice > Préférences sur Mac
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

Re: [Basic] Récupérer la chaine trouvée avec Regex

Message par Hubert Lambert »

Bonjour,

Tout d'abord, tu devrais avoir un message d'erreur en utilisant une variable "replace", qui est un mot réservé.

Ensuite, pour répondre strictement à la question, il suffit d'utiliser les mêmes conventions que dans l'interface utilisateur (voir l'aide intégrée) :

Code : Tout sélectionner

Sub replace_with_regex
  document = ThisComponent
  pattern = "([^a-z])tri([^a-z])"
  repl = document.createReplaceDescriptor()
  repl.SearchRegularExpression = True
  repl.SearchString = pattern
  repl.ReplaceString = "$1tree$2"
  document.replaceAll(repl)
End Sub
Dans ton cas précis il y a plus simple, en utilisant la propriété SearchWords pour forcer la recherche des mots entiers :

Code : Tout sélectionner

Sub replace_with_regex_2
  document = ThisComponent
  pattern = "tri"
  repl = document.createReplaceDescriptor()
  repl.SearchRegularExpression = True
  repl.SearchString = pattern
  repl.SearchWords = True
  repl.ReplaceString = "tree"
  document.replaceAll(repl)
End Sub
Cordialement.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
forumateur
Membre lOOyal
Membre lOOyal
Messages : 28
Inscription : 10 nov. 2008 23:28

Re: [Basic] Récupérer la chaine trouvée avec Regex

Message par forumateur »

Merci beaucoup pour ces réponses !!

Et pour récupérer dans une variable la totalité d'une chaine trouvée par une recherche regex, dans le cas général ?

Cordialement
LibreOffice 6.1 sous Windows 10
(LibreOffice 6.1 par choix)
forumateur
Membre lOOyal
Membre lOOyal
Messages : 28
Inscription : 10 nov. 2008 23:28

Re: [Basic] Récupérer la chaine trouvée avec Regex

Message par forumateur »

P.S.
Où trouver un dictionnaire complet de toutes les fonctions et instructions OOoBasic existantes ?
Merci encore...
LibreOffice 6.1 sous Windows 10
(LibreOffice 6.1 par choix)
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

Re: [Basic] Récupérer la chaine trouvée avec Regex

Message par Hubert Lambert »

forumateur a écrit :Et pour récupérer dans une variable la totalité d'une chaine trouvée par une recherche regex, dans le cas général ?
Si j'ai bien compris, c'est '&' ou '$0'. Tous les détails ici : https://help.libreoffice.org/Common/Lis ... essions/fr.
forumateur a écrit :Où trouver un dictionnaire complet de toutes les fonctions et instructions OOoBasic existantes ?
Beaucoup de fonctions, pour une grande partie héritées des projets de compatibilité avec le vba, ne sont pas documentées.
On peut trouver une liste ici. En mode lisible :

Code : Tout sélectionner

Abs
Array
Asc
AscW
Atn
ATTR_ARCHIVE
ATTR_DIRECTORY
ATTR_HIDDEN
ATTR_NORMAL
ATTR_READONLY
ATTR_SYSTEM
ATTR_VOLUME
Beep
Blue
CallByName
CBool
CByte
CCur
CDate
CDateFromUnoDate
CDateToUnoDate
CDateFromUnoTime
CDateToUnoTime
CDateFromUnoDateTime
CDateToUnoDateTime
CDateFromIso
CDateToIso
CDec
CDbl
CF_BITMAP
CF_METAFILEPICT
CF_TEXT
ChDir
ChDrive
Choose
Chr
ChrW
CInt
CLEAR_ALLTABS
CLEAR_TAB
CLng
CompatibilityMode
ConvertFromUrl
ConvertToUrl
Cos
CreateObject
CreateUnoListener
CreateUnoDialog
CreateUnoService
CreateUnoServiceWithArguments
CreateUnoStruct
CreateUnoValue
CreatePropertySet
CSng
CStr
CurDir
CVar
CVErr
DDB
Date
DateAdd
DateDiff
DatePart
DateSerial
DateValue
Day
Ddeexecute
Ddeinitiate
Ddepoke
Dderequest
Ddeterminate
Ddeterminateall
DimArray
Dir
DoEvents
DumpAllObjects
Empty
EqualUnoObjects
EnableReschedule
Environ
EOF
Erl
Err
Error
Exp
False
FileAttr
FileCopy
FileDateTime
FileExists
FileLen
FindObject
FindPropertyObject
Fix
Format
FormatDateTime
FormatNumber
Frac
FRAMEANCHORCHAR
FRAMEANCHORPAGE
FRAMEANCHORPARA
FreeFile
FreeLibrary
FV
Get
GetAttr
GetDefaultContext
GetDialogZoomFactorX
GetDialogZoomFactorY
GetGUIType
GetGUIVersion
GetPathSeparator
GetProcessServiceManager
GetSolarVersion
GetSystemTicks
GetSystemType
GlobalScope
Green
HasUnoInterfaces
Hex
Hour
IDABORT
IDCANCEL
IDNO
IDOK
IDRETRY
IDYES
Iif
Input
InputBox
InStr
InStrRev
Int
IPmt
IRR
IsArray
IsDate
IsEmpty
IsError
IsMissing
IsNull
IsNumeric
IsObject
IsUnoStruct
Join
Kill
LBound
LCase
Left
Len
LenB
Load
LoadPicture
Loc
Lof
Log
LTrim
MB_ABORTRETRYIGNORE
MB_APPLMODAL
MB_DEFBUTTON1
MB_DEFBUTTON2
MB_DEFBUTTON3
MB_ICONEXCLAMATION
MB_ICONINFORMATION
MB_ICONQUESTION
MB_ICONSTOP
MB_OK
MB_OKCANCEL
MB_RETRYCANCEL
MB_SYSTEMMODAL
MB_YESNO
MB_YESNOCANCEL
Me
Mid
Minute
MIRR
MkDir
Month
MonthName
MsgBox
Nothing
Now
NPer
NPV
Null
Oct
Partition
Pi
Pmt
PPmt
Put
PV
QBColor
Randomize
Rate
Red
Reset
ResolvePath
RGB
Replace
Right
RmDir
Round
Rnd
RTL
RTrim
SavePicture
Second
Seek
SendKeys
SetAttr
SET_OFF
SET_ON
SET_TAB
Sgn
Shell
Sin
SLN
SYD
Space
Spc
Split
Sqr
Str
StrComp
StrConv
String
StrReverse
Switch
Tab
Tan
Time
Timer
TimeSerial
TimeValue
TOGGLE
Trim
True
TwipsPerPixelX
TwipsPerPixelY
TYP_AUTHORFLD
TYP_CHAPTERFLD
TYP_CONDTXTFLD
TYP_DATEFLD
TYP_DBFLD
TYP_DBNAMEFLD
TYP_DBNEXTSETFLD
TYP_DBNUMSETFLD
TYP_DBSETNUMBERFLD
TYP_DDEFLD
TYP_DOCINFOFLD
TYP_DOCSTATFLD
TYP_EXTUSERFLD
TYP_FILENAMEFLD
TYP_FIXDATEFLD
TYP_FIXTIMEFLD
TYP_FORMELFLD
TYP_GETFLD
TYP_GETREFFLD
TYP_GETREFPAGEFLD
TYP_HIDDENPARAFLD
TYP_HIDDENTXTFLD
TYP_INPUTFLD
TYP_INTERNETFLD
TYP_JUMPEDITFLD
TYP_MACROFLD
TYP_NEXTPAGEFLD
TYP_PAGENUMBERFLD
TYP_POSTITFLD
TYP_PREVPAGEFLD
TYP_SEQFLD
TYP_SETFLD
TYP_SETINPFLD
TYP_SETREFFLD
TYP_SETREFPAGEFLD
TYP_TEMPLNAMEFLD
TYP_TIMEFLD
TYP_USERFLD
TYP_USRINPFLD
TypeLen
TypeName
UBound
UCase
Unload
Val
VarType
V_EMPTY
V_NULL
V_INTEGER
V_LONG
V_SINGLE
V_DOUBLE
V_CURRENCY
V_DATE
V_STRING
Wait
FuncCaller
WaitUntil
Weekday
WeekdayName
Year
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
forumateur
Membre lOOyal
Membre lOOyal
Messages : 28
Inscription : 10 nov. 2008 23:28

Re: [Basic] Récupérer la chaine trouvée avec Regex

Message par forumateur »

Merci beaucoup Hubert;
Bonne fin de journée
LibreOffice 6.1 sous Windows 10
(LibreOffice 6.1 par choix)