Bonjour,
voici un petit problème de type scolaire (mais sans la solution !) :
Supposons qu'un texte comporte des séries de chiffres identiques contigus.
Certaines séries sont composées d'un nombre de chiffres identiques contigus multiple de 2,
D'autres séries sont composées d'un nombre de chiffre identiques contigus multiple de 3.
On souhaite remplacer, dans les séries multiple de 2, chaque paquet de 2 chiffres par le chiffre 2,
et dans les séries multiple de 3, chaque paquet de 3 chiffres par le chiffre 3 ?
Exemple :
0010111010111101000000101011010010110111
donc
00 10 111 010 11 11 01 000 000 1010 11 01 00 10 11 0 111
devient
2 10 3 010 2 2 01 3 3 1010 2 01 2 10 2 0 3
donc
21030102201331010201210203
Précision :
Dans l'exemple, 000000 peut être interprété comme 00 00 00, soit 222 ou comme 000 000, soit 33.
Lorsque ce genre de confusion est possible, c'est le résultat contenant le plus grand chiffre (donc 33) et non pas celui représentant le plus grand nombre (222) qui doit être retenu
Question :
Est-ce que les regex permettent une telle chose ?
Regex Rechercher et remplacer des séries de chiffres identiques contigus par paquets
Modérateur : Vilains modOOs
-
touvenant
- Membre OOrganisé

- Messages : 92
- Inscription : 23 déc. 2012 18:42
Regex Rechercher et remplacer des séries de chiffres identiques contigus par paquets
Dernière modification par touvenant le 14 oct. 2024 08:14, modifié 1 fois.
LibreOffice 24.2.7.2 x64
Windows10 Pro v10.0.19044
Windows10 Pro v10.0.19044
-
micmac
- RespOOnsable forum

- Messages : 9957
- Inscription : 28 août 2010 08:45
Re: rechercher et remplacer des séries de chiffres identiques contigus par paquets
Bonjour,
Dans cette section, la balise [Writer] n'a pas lieu de figurer dans le titre. Les balises sont réservées à la section Macros et API. Veuillez corriger.
Avant de poster une nouvelle question, il nous serait agréable que vous donniez suite au fil précédemment ouvert :
[Writer]Recherche et remplace sur les sélections
notamment en précisant la solution retenue et en ajoutant le balisage [Résolu]
si c'est le cas.
C'est une question de courtoisie pour les gens qui vous ont répondu et consacré bénévolement de leur temps. Notre forum est plus lisible avec ce balisage comme vous avez pu vous en rendre compte en le parcourant.
Merci de votre collaboration
Dans cette section, la balise [Writer] n'a pas lieu de figurer dans le titre. Les balises sont réservées à la section Macros et API. Veuillez corriger.
Avant de poster une nouvelle question, il nous serait agréable que vous donniez suite au fil précédemment ouvert :
[Writer]Recherche et remplace sur les sélections
notamment en précisant la solution retenue et en ajoutant le balisage [Résolu]
C'est une question de courtoisie pour les gens qui vous ont répondu et consacré bénévolement de leur temps. Notre forum est plus lisible avec ce balisage comme vous avez pu vous en rendre compte en le parcourant.
Merci de votre collaboration
Touche Ctrl de Windows = touche cmd⌘ sur Mac
OpenOffice > Outils > Options sur Windows = OpenOffice > Préférences sur macOS
OpenOffice > Outils > Options sur Windows = OpenOffice > Préférences sur macOS
-
touvenant
- Membre OOrganisé

- Messages : 92
- Inscription : 23 déc. 2012 18:42
Re: [Writer] rechercher et remplacer des séries de chiffres identiques contigus par paquets
Bonjour Micmac,
sur le fil [Writer]Recherche et remplace sur les sélections,
la question est toujours en suspens... Je ne sais toujours pas s'il est possible d'effectuer une opération de recherche et remplacement sur des sélections.
C'est la raison pour laquelle je n'ai pas résolu le fil. (D'autant plus qu'à la lecture de l'ouvrage de M. Pytoniak, il me semble avoir trouvé une piste, mais que je n'ai pas encore explorée...)
sur le fil [Writer]Recherche et remplace sur les sélections,
la question est toujours en suspens... Je ne sais toujours pas s'il est possible d'effectuer une opération de recherche et remplacement sur des sélections.
C'est la raison pour laquelle je n'ai pas résolu le fil. (D'autant plus qu'à la lecture de l'ouvrage de M. Pytoniak, il me semble avoir trouvé une piste, mais que je n'ai pas encore explorée...)
LibreOffice 24.2.7.2 x64
Windows10 Pro v10.0.19044
Windows10 Pro v10.0.19044
-
Jean-Louis Cadeillan
- GourOOu

- Messages : 6077
- Inscription : 02 janv. 2009 23:56
Re: Regex Rechercher et remplacer des séries de chiffres identiques contigus par paquets
Bonjour,
Si tu mets ton texte initial dans la cellule A1 d'une feuille Calc, il est possible de trouver la solution. Dans le fichier joint, j'ai mis les différentes étapes de résolution pour mieux comprendre la démarche algorithmique. Il y a un commentaire dans chaque entête de colonnes (C à F) ou chaque cellule (A1, A3, A4). Le nombre de caractères de la chaîne initiale dans A1 n'est pas un problème (2^28-1 en théorie) : il sera limité par le nombre de lignes (2^20)… et surtout par la mémoire disponible !
Cordialement,
Jean-Louis
Si tu mets ton texte initial dans la cellule A1 d'une feuille Calc, il est possible de trouver la solution. Dans le fichier joint, j'ai mis les différentes étapes de résolution pour mieux comprendre la démarche algorithmique. Il y a un commentaire dans chaque entête de colonnes (C à F) ou chaque cellule (A1, A3, A4). Le nombre de caractères de la chaîne initiale dans A1 n'est pas un problème (2^28-1 en théorie) : il sera limité par le nombre de lignes (2^20)… et surtout par la mémoire disponible !
Cordialement,
Jean-Louis
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Windows 10 Pro 64, LibO 25.2.7.2 (JRE 1.8.0_471) et AOO 4.1.16 (Adoptium 19.0.2.7)
-
touvenant
- Membre OOrganisé

- Messages : 92
- Inscription : 23 déc. 2012 18:42
Re: Regex Rechercher et remplacer des séries de chiffres identiques contigus par paquets
Bonsoir Jean-Louis,
je te remercie pour ta réponse.
Ta solution fonctionne à merveille, cependant, la question portait sur une résolution dans Writer et avec des regex.
Il est bien sûr envisageable de coder une macro qui couperait le texte sélectionné dans writer, qui ouvrirait un document calc, qui collerait le texte dans la première cellule puis qui copierait tes formules sur autant de ligne que de caractères dans le texte, puis qui récupèrerait le contenu de la cellule A4 et le collerait dans writer...
Mais y-a-t-il une regex qui ferait le job sans passer par toute cette gymnastique ?
je te remercie pour ta réponse.
Ta solution fonctionne à merveille, cependant, la question portait sur une résolution dans Writer et avec des regex.
Il est bien sûr envisageable de coder une macro qui couperait le texte sélectionné dans writer, qui ouvrirait un document calc, qui collerait le texte dans la première cellule puis qui copierait tes formules sur autant de ligne que de caractères dans le texte, puis qui récupèrerait le contenu de la cellule A4 et le collerait dans writer...
Mais y-a-t-il une regex qui ferait le job sans passer par toute cette gymnastique ?
LibreOffice 24.2.7.2 x64
Windows10 Pro v10.0.19044
Windows10 Pro v10.0.19044
-
Jean-Louis Cadeillan
- GourOOu

- Messages : 6077
- Inscription : 02 janv. 2009 23:56
Re: Regex Rechercher et remplacer des séries de chiffres identiques contigus par paquets
Bonsoir,
J'ai l'impression qu'il me manque quelques précisions :
D'un autre côté, rien n'empêche d'incorporer un classeur dans un document Writer autant de fois qu'on le désire.
Le document joint odt utilise une formule unique matricielle (en A2) pour faire la transformation (voir le document ods pour plus d'explications). Cette formule utilise l'extension Lox365 pour avoir la fonction TEXTSPLIT() à disposition (elle n'est toujours pas présente nativement dans la version 24.8 ), mais j'aurais très bien pu utiliser les formules et colonnes de mon précédent post dans les classeurs Calc incorporés. Autre remarque : dans le classeur incorporé, on peut ne faire apparaître que le résultat final, la chaîne initiale étant cachée.
Reste la piste du traitement par macro (en utilisant ou non la démarche algorithmique de la première ou la seconde formule), mais cela dépasse mes compétences. Si tu comptes explorer cette voie, il faudra poster un message dans la rubrique Macros et API du Forum.
Cordialement,
Jean-Louis
J'ai l'impression qu'il me manque quelques précisions :
- le texte comporte-t-il autre chose (d'autres caractères, des phrases de texte, des espaces, etc.) que des chiffres ?
- le texte comporte-il autre chose (d'autres chiffres) que des 1 ou des 0 ?
- pour les n-uplets (paquets) de 1 ou 0, n est-il quelconque (n'importe quelle valeur) ?
- le texte comporte-t-il plusieurs listes de 1 ou 0 séparées (avec pour chacune une série de n-uplets) ?
- si la série comporte un n-uplet dont n n'est pas divisible ni par 3 ni pas 2 (par exemple 11111), doit-on considérer qu'il s'agit de la juxtaposition, par exemple, d'un doublet et d'un triplet (ce cas n'est pas traité dans les formules que j'ai proposées…) ?
- s'agit-il de remplacer la chaîne initiale (et donc qu'elle n'apparaissent plus) par la nouvelle, ou bien faire l'opération en maintenant la chaîne initiale et la chaîne nouvelle ?
- s'agit-t-il de traiter un document texte déjà rédigé avec des listes en plusieurs endroits (séparées par des textes en français, par exemple) et des les transformer toutes en même temps ?
D'un autre côté, rien n'empêche d'incorporer un classeur dans un document Writer autant de fois qu'on le désire.
Le document joint odt utilise une formule unique matricielle (en A2) pour faire la transformation (voir le document ods pour plus d'explications). Cette formule utilise l'extension Lox365 pour avoir la fonction TEXTSPLIT() à disposition (elle n'est toujours pas présente nativement dans la version 24.8 ), mais j'aurais très bien pu utiliser les formules et colonnes de mon précédent post dans les classeurs Calc incorporés. Autre remarque : dans le classeur incorporé, on peut ne faire apparaître que le résultat final, la chaîne initiale étant cachée.
Je ne vois pas, essentiellement du fait de la recherche des multiples : tous les n-uplets multiples de 2 et 3 à la fois seraient à traiter individuellement et donc traiter 000000, 111111, 000000000000, etc. Mais peut-être fais-je une erreur d'analyse.
Reste la piste du traitement par macro (en utilisant ou non la démarche algorithmique de la première ou la seconde formule), mais cela dépasse mes compétences. Si tu comptes explorer cette voie, il faudra poster un message dans la rubrique Macros et API du Forum.
Cordialement,
Jean-Louis
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Windows 10 Pro 64, LibO 25.2.7.2 (JRE 1.8.0_471) et AOO 4.1.16 (Adoptium 19.0.2.7)
-
touvenant
- Membre OOrganisé

- Messages : 92
- Inscription : 23 déc. 2012 18:42
Re: Regex Rechercher et remplacer des séries de chiffres identiques contigus par paquets
Bonjour Jean Louis,
ne te tortures pas trop stp, ta première réponse était parfaite en terme de compréhension du problème, à l'exception de travailler sur Writer avec des regex.
Il convient d'appréhender ce problème comme un exercice permettant une meilleure compréhension des regex.
l'expression (00)*, par exemple, va capturer chacun des groupes de 00 qui se succèdent, mais le remplacement ne se fera pas sur chaque groupe mais sur l'ensemble, malgré que la parenthèse soit fermée avant le quantifieur... comment contourner ce fonctionnement ? (sans contourner le problème !)
Si nécessaire, rien n'empêche d'effectuer plusieurs recherche et remplace consécutif, avec des cibles regex (ou pas) identiques (ou pas)...
ne te tortures pas trop stp, ta première réponse était parfaite en terme de compréhension du problème, à l'exception de travailler sur Writer avec des regex.
nonle texte comporte-t-il autre chose (d'autres caractères, des phrases de texte, des espaces, etc.) que des chiffres ?
nonle texte comporte-il autre chose (d'autres chiffres) que des 1 ou des 0 ?
ouipour les n-uplets (paquets) de 1 ou 0, n est-il quelconque (n'importe quelle valeur) ?
nonle texte comporte-t-il plusieurs listes de 1 ou 0 séparées (avec pour chacune une série de n-uplets) ?
ouis'agit-il de remplacer la chaîne initiale (et donc qu'elle n'apparaissent plus) par la nouvelle
nons'agit-t-il de traiter un document texte déjà rédigé avec des listes en plusieurs endroits (séparées par des textes en français, par exemple) et des les transformer toutes en même temps ?
je n'ai effectivement pas apporté cette précision : ce n'est ni un doublet, ni un triplet, donc laisser telquel est une bonne réponse, mais traiter 55555 = 5 est une bonne réponse également.si la série comporte un n-uplet dont n n'est pas divisible ni par 3 ni pas 2 (par exemple 11111), doit-on considérer qu'il s'agit de la juxtaposition, par exemple, d'un doublet et d'un triplet (ce cas n'est pas traité dans les formules que j'ai proposées…) ?
Je ne sais pas répondre à cette question, comme je l'ai précisé, je ne donne pas la solution du problème... parce que je ne l'ai pas.Je ne vois pas, essentiellement du fait de la recherche des multiples : tous les n-uplets multiples de 2 et 3 à la fois seraient à traiter individuellement et donc traiter 000000, 111111, 000000000000, etc. Mais peut-être fais-je une erreur d'analyse.
Il convient d'appréhender ce problème comme un exercice permettant une meilleure compréhension des regex.
l'expression (00)*, par exemple, va capturer chacun des groupes de 00 qui se succèdent, mais le remplacement ne se fera pas sur chaque groupe mais sur l'ensemble, malgré que la parenthèse soit fermée avant le quantifieur... comment contourner ce fonctionnement ? (sans contourner le problème !)
Si nécessaire, rien n'empêche d'effectuer plusieurs recherche et remplace consécutif, avec des cibles regex (ou pas) identiques (ou pas)...
LibreOffice 24.2.7.2 x64
Windows10 Pro v10.0.19044
Windows10 Pro v10.0.19044