[Résolu][Writer] Extrait chaînes de caractères

Discussions et questions sur tout ce qui concerne la programmation sous StarOffice NeoOffice ou OpenOffice.org tous langages et tous modules confondus.

Modérateur: Vilains modOOos

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 !

[Résolu][Writer] Extrait chaînes de caractères

Messagepar joel275 » 07 Nov 2009 18:50

Bonjour,
ce n'est pas une question, mais je ne savais pas où poster...
J'ai essayé d'extraire la chaîne "rty" de "(aze(rty)uio)" entre les deux parenthèses intérieures avec la fonction FindPartString de la librairie "Tools" fournie avec OOo; mais cette fonction m'a retourné "aze(rty".
Je me suis pris par la main pour faire une autre fonction ( "ExtraitChaine") qui donne le résultat espéré dans ce cas.

Code: Tout sélectionner   AgrandirRéduire
Sub Main
Dim MonTexte$, Avant$ , Apres$, Debut%, MonResultat$, PosCherche%
   GlobalScope.BasicLibraries.LoadLibrary("Tools")
   MonTexte = "(aze(rty)uio)": Avant = "(": Apres = ")": Debut = 1
   MsgBox FindPartString(MonTexte, Avant, Apres, Debut)
   MsgBox ExtraitChaine(MonTexte, Avant, Apres, PosCherche) & Chr(10) & PosCherche
End Sub

Function ExtraitChaine(A, B$, C$, K%) as String         ' extrait entre B et C
Dim I%, J%, L%, D$, E$
     L = Instr(A, B)
     E = Mid(A, L + Len(B))      ' pour le cas où B = C: pointe sur la première occurrence de B
    I = InStr(E, C)
   If I * L = 0 Then Exit Function
    D = Left(E, I - 1)            ' pointe sur la première occurrence de C après B
    For J = Len(D) To 1 Step -1         ' remonte à l'occurrence de B précédente
       If Mid(D,J,Len(B)) = B Then Exit For   '  pour le cas où on a:   (...(...)...)
    Next
    If J > 0 Then D = Mid(D, J + Len(B))
    ExtraitChaine = D:      K = L + J
    A = Remplace(A, B & D & C, "", 1)
End Function


j'espère que ce code servira à quelqu'un (et surtout qu'il n'a pas de bugs...)

Bon week-end à tous
Joël
Dernière édition par Flip le 07 Nov 2009 23:22, édité 1 fois au total.
Raison: [Resolu] -> [Résolu]
OpenOffice 3.1 Windows Vista familial
joel275
Membre OOorganisé
Membre OOorganisé
 
Messages: 73
Inscrit le: 10 Jan 2009 10:05

Re: [Résolu][Writer] Extrait chaînes de caractères

Messagepar Alain de La Chaume » 11 Nov 2009 16:32

Bonjour joel275

J'ai eu la curiosité de tester votre code... Si je neutralise cette ligne :
Code: Tout sélectionner   AgrandirRéduire
    A = Remplace(A, B & D & C, "", 1)
... je n'ai plus l'erreur
Erreur d'exécution BASIC.
Sous-procédure ou procédure de fonction non définie.
:)
Bien cOOordialement, Alain
API-culteur et pêcheur de macros avec OOo 3.1.1 version officielle sous Linux Ubuntu 8.04
Pour rechercher efficacement dans ce forum
Le SDK nouveau (3.1.1) est arrivé ici !
Avatar de l’utilisateur
Alain de La Chaume
Membre cOOonverti
Membre cOOonverti
 
Messages: 354
Inscrit le: 28 Sep 2008 14:56
Localisation: Complètement à l'Ouest

Re: [Résolu][Writer] Extrait chaînes de caractères

Messagepar joel275 » 11 Nov 2009 18:03

Bonjour,
merci Alain de me signaler cet oubli: je n'ai pas fourni la fonction "Remplacer"! :oops:
voilà le code corrigé (enfin, j'espère...)

Code: Tout sélectionner   AgrandirRéduire
Function ExtraitChaine(A, B$, C$, K%) as String         ' extrait entre B et C
Dim I%, J%, L%, D$, E$, V
   L = Instr(A, B)
   E = Mid(A, L + Len(B))      ' pour le cas où B = C: pointe sur la première occurrence de B
    I = InStr(E, C):          If I * L = 0 Then Exit Function
    D = Left(E, I - 1)            ' pointe sur la première occurrence de C après B
    For J = Len(D) To 1 Step -1         ' remonte à l'occurrence de B précédente
       If Mid(D,J,Len(B)) = B Then Exit For   '  pour le cas où on a:   (...(...)...)
    Next
    If J > 0 Then D = Mid(D, J + Len(B))
    ExtraitChaine = D:      K = L + J         ' K retourne la position de B dans A
    V = Split(A, B & D & C, 2)
    A = Join(V, "")            ' A retourne la chaîne de départ d'où on a extrait la sous-chaîne
End Function


J'espère que cette fois-ci, tout est correct.
Bonne après-midi à tous
OpenOffice 3.1 Windows Vista familial
joel275
Membre OOorganisé
Membre OOorganisé
 
Messages: 73
Inscrit le: 10 Jan 2009 10:05

Re: [Résolu][Writer] Extrait chaînes de caractères

Messagepar Alain de La Chaume » 11 Nov 2009 19:18

Re,

J'espère que cette fois-ci, tout est correct.
Oui ! La fonction ... fonctionne. Mais si je peux me permettre d'être encore un peu plus curieux,
j'aimerais bien savoir quel est pour vous l'inconvénient à utiliser la bonne vieille fonction InStr ?
Quelque chose du genre :
Code: Tout sélectionner   AgrandirRéduire
Sub Main
Dim MonTexte$, PosCherche%
   MonTexte = "(aze(rty)uio)"
   posCherche = instr(1, MonTexte, "(rty)", 0)
   if posCherche = 0 _
      then print("""(rty)"" pas trouvé dans """ & MonTexte & """" ) _
      else print("""(rty)"" trouvé dans """ & MonTexte _
         & """ à la position " & posCherche)
End Sub
Bien cOOordialement, Alain
API-culteur et pêcheur de macros avec OOo 3.1.1 version officielle sous Linux Ubuntu 8.04
Pour rechercher efficacement dans ce forum
Le SDK nouveau (3.1.1) est arrivé ici !
Avatar de l’utilisateur
Alain de La Chaume
Membre cOOonverti
Membre cOOonverti
 
Messages: 354
Inscrit le: 28 Sep 2008 14:56
Localisation: Complètement à l'Ouest

Re: [Résolu][Writer] Extrait chaînes de caractères

Messagepar joel275 » 11 Nov 2009 19:39

Re,
je ne peux pas utiliser votre code, car je ne connais pas à priori la chaîne comprise entre les deux séparateurs.
Par exemple si je veux calculer la valeur de (4(x+3)-7(x-5)) pour x = 1/3 et obtenir le résultat exact sous forme de fraction, il faut que je calcule 1/3 + 3 = 10/3 et que je remplace (x+3) par 10/3 puis 1/3 - 5 = -14/3 et que je remplace (x-5) par -14/3 puis que je recommence pour (4*10/3-7*-14/3) à extraire et remplacer d'éventuels blocs de parenthèses jusqu'au résultat final.
Pour un résultat décimal approché de la même expression, j'utiliserais le tableur, mais pour des résultats fractionnaires ou avec des racines, je n'ai pas trouvé plus simple. Si d'ailleurs, quelqu'un a des idées...., je suis preneur.
Bonne soirée
Joël
OpenOffice 3.1 Windows Vista familial
joel275
Membre OOorganisé
Membre OOorganisé
 
Messages: 73
Inscrit le: 10 Jan 2009 10:05

Re: [Résolu][Writer] Extrait chaînes de caractères

Messagepar Alain de La Chaume » 12 Nov 2009 01:11

Re,

Pan sur le bec ! :oops:
C'est promis, demain je vais consulter mon ophtalmo...
Bien cOOordialement, Alain
API-culteur et pêcheur de macros avec OOo 3.1.1 version officielle sous Linux Ubuntu 8.04
Pour rechercher efficacement dans ce forum
Le SDK nouveau (3.1.1) est arrivé ici !
Avatar de l’utilisateur
Alain de La Chaume
Membre cOOonverti
Membre cOOonverti
 
Messages: 354
Inscrit le: 28 Sep 2008 14:56
Localisation: Complètement à l'Ouest


Retour vers Macros et API

Qui est en ligne ?

Utilisateurs parcourant actuellement ce forum : Google [Bot], Jean-Marc et 1 invité