Bonjour.

 J'utilise OpenOffice sous Windows et il me semble que, dans les macros en Ooo 
Basic, le fait qu'une  marque de paragraphe soit lue (sous Windows, en tout 
cas) comme Chr(13) & Chr(10) pose un  problème : pour un curseur de texte, il 
n'y a là qu'un caractère,  mais dans une chaîne, la marque compte pour deux.
 J'ai soumis ce problème sur le forum anglophone le 19 de ce mois, mais  je 
n'ai pas reçu de réponse, donc je me permets d'essayer ici.

 Je voudrais écrire une macro qui filtre interactivement des caractères 
prohibés dans un texte, disons dans le texte principal du document actif.
 (Les caractères prohibés sont par exemple ceux dont le Asc() est > 96, mais 
dans la pratique réelle, il s'agit de quelque chose de plus compliqué.)

Déplacer un curseur en l'étendant successivement sur chaque caractère, et 
sélectionner le curseur si le caractère renvoyé par la chaîne de ce curseur est 
prohibé, cela fonctionne correctement, mais c'est très lent.

J'ai donc essayé d'étendre le curseur sur des zones successives de 32767 
caractères, de lire la chaîne correspondante caractère par caractère, et, au 
cas où le n-ième caractère de cette chaîne est prohibé, de faire sélectionner 
le n-ième caractère de la zone couverte par le curseur.
C'est nettement plus rapide, mais c'est saboté par le fait que les marques de 
paragraphe comptent pour deux caractères dans les chaînes et pour un seul dans 
les mouvements de curseur.

Éventuellement, vous pourrez voir un exemple du code complet sur le forum 
anglophone, sous le titre "Cursors and strings don't count the characters on 
the same way".
 (Il est maintenant au début de la seconde page du forum sur les macros.)

Évidemment, pendant qu'un indice va de 1 à la longueur de la chaîne, on peut 
utiliser un autre indice qui ne s'incrémente que si le caractère pointé par le 
premier indice n'est pas un Chr(13) suivi d'un Chr(10). C'est alors ce second 
indice qui indique à quel endroit de la zone du curseur se trouve le caractère 
prohibé.

 Dans les cas que j'ai testés, cela fonctionne correctement et nettement plus 
vite que la première méthode ci-dessus, mais enfin, ça me semble un peu un 
bricolage d'amateur et j'aimerais savoir s'il n'existe pas une solution 
"officielle".

 Merci d'avance à qui me répondra.

Répondre à