[Writer] Supprimer caractères entre deux éléménts...

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 !
FLCEOAP
Fraîchement OOthentifié
Messages : 3
Inscription : 09 mars 2006 14:19

[Writer] Supprimer caractères entre deux éléménts...

Message par FLCEOAP »

Bonjour à tous !

Voilà, je dois réaliser une macro sous OpenOffice.org-Writer qui a pour but de me permettre de réaliser le parsage d'un fichier HTML en un fichier XML à l'aide d'un fichier XSL.

Actuellement, j'ai un tableau dans un fichier "*.doc". A l'aide d'OpenOffice.org, j'arrive à convertir ce tableau en HTML et le résultat est bien plus propre et mieux construit que le code récupéré à l'aide de Microsoft Word... Cependant, il reste des attributs dont la valeur n'est pas entre guillement. Or ceci rend impossible d'utiliser un processeur XSL pour réaliser le parsage dont j'ai besoin.

Pour illustrer mon propos :
J'ai

Code : Tout sélectionner

<BALISE1 attr1="a" attr2=xyz attr3=plop>
   ...
</BALISE1>

<BALISE2 attr4=ijk attr5="123"/>


Et je voudrais avoir :

Code : Tout sélectionner

<BALISE1>
   ...
</BALISE1>

<BALISE2/>


Ou :

Code : Tout sélectionner

<BALISE1 attr1="a" attr2="xyz" attr3="plop">
   ...
</BALISE1>

<BALISE2 attr4="ijk" attr5="123"/>


Il existerait donc deux solutions :
1. supprimer tous les attributs (seul le nom des balises m'intéressent)
2. rajouter les guillemets nécessaires

Je viens de débuter en Basic de OOo et j'ai donc de nombreux soucis... Cependant, j'envisageais d'utiliser, dans les deux cas, d'éléments invoqués de cette manière :

Code : Tout sélectionner

vOpenSearch=ThisComponent.createSearchDescriptor()

L'algorithme que j'avais envisagé pour la 1. est :

Code : Tout sélectionner

- Effacer tous les guillemets déjà installés 
- TANT QUE nous n'arrivons pas à la fin du texte
   - SI je trouve "<" ALORS
       - SI je trouve ">" ALORS
             * (entre les deux [i]SearchDescriptor[/i])
             - SI je trouve "=" ALORS remplacer par " =" "
             - SI je trouve " " ALORS 
                   - SI je trouve "/>" ALORS remplacer par ""/>"
                   - SI je trouve ">" ALORS remplacer par "">"
             - FIN SI
       - FIN SI
   - FIN SI
- FIN TANT QUE
L'algorithme pour la 2. est :

Code : Tout sélectionner

- TANT QUE nous n'arrivons pas à la fin du texte
   - SI je trouve "<" ALORS
       - SI je trouve ">" ALORS
           - SI je trouve " " ALORS supprimer jusqu'à "/" OU jusqu'à ">"
       - FIN SI
   - FIN SI
- FIN TANT QUE
Est-ce que vous pourriez me donner des conseils ? Quelle méthode vous parait la plus propre ? La plus simple à mettre en oeuvre ? Ou bien... si vous avez une autre suggestion...

En fait, j'arrive actuellement à trouver les "<" et ">". Le problème vient du fait que je ne sais pas effectuer les traitements en utilisant les positions des curseurs que j'utilise (les SearchDescriptor). Si je savais faire celà, je pense que je pourrais dire : entre ces deux positions, efface tout (en s'ayant décalé auparavent...)

J'espère que vous avez compris mon problème et que vous pourrez m'aider !
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25167
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Message par Dude »

Bonjour,

Pourquoi ne pas utiliser une macro qui ferait un simple "recherche et remplace" ?
Poser une question, c'est bien. Répondre aux autres, c'est encore mieux.
Améliorez AOO et votez pour les issues
FLCEOAP
Fraîchement OOthentifié
Messages : 3
Inscription : 09 mars 2006 14:19

Message par FLCEOAP »

Je ne fais pas ça parce que, s'il est vrai que je peux connaître par avance les noms des différents attributs, je ne connais pas forcément la valeur qui leur est attribué.

A moins qu'il soit possible de faire une recherche sur l'attribut ("attr1" par exemple) et d'arriver à récupérer "attr1=xxx" et d'effacer ces caractères ? Cela dit, je ne connais pas non plus le nombre de caractères qui code la valeur de l'attribut (il y a 3 ou 8 x ?)...

C'est pour ces raisons que je n'ai pas cherché par là... :roll:

Sinon, vous auriez une idée ?
FLCEOAP
Fraîchement OOthentifié
Messages : 3
Inscription : 09 mars 2006 14:19

Message par FLCEOAP »

Bon, bah... :roll: Je n'ai pas trouvé la réponse que je cherchais... Donc, je suis retourné sous VBA pour Word... C'est dommage, j'aurais préféré réussir à m'en passer... Mais comme je ne connais pas du tout le langage des macros de OOo, le changement n'est pas gagné...
Avatar de l’utilisateur
Bidouille
RespOOnsable forum
RespOOnsable forum
Messages : 12221
Inscription : 08 nov. 2005 16:23
Localisation : Caen, France

Message par Bidouille »

FLCEOAP a écrit :Bon, bah... :roll: Je n'ai pas trouvé la réponse que je cherchais...
http://user.services.openoffice.org/fr/ ... =2620#2620
Avatar de l’utilisateur
cris59
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 482
Inscription : 20 mars 2006 15:15
Localisation : Paris

Message par cris59 »

il faut utiliser le fait qu'à l'intérieur de la balise il y a un espace qui sépare chaque élément.
si entre < et > il y a un espace, il y a un attribut
tu regardes le caractere apres le = et le caractère avant le prochain espace ou le / ou le >
ensuite tu otes les guillemets ou en mets si besoin et selon ton choix
WinXP PRO SP2 avec OOo2.2 & Vista avec OOo2.3.1
& Debian avec OOo2.2

http://www.cpserv.net/