[Résolu][Basic] LET "à 2 entrées" : paramètres étendus

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 !
Xunor
NOOuvel adepte
NOOuvel adepte
Messages : 16
Inscription : 02 août 2018 11:02

[Résolu][Basic] LET "à 2 entrées" : paramètres étendus

Message par Xunor »

Hello à tous ceux qui passeront par là ;)

Je suis débutant en basic open office

J'ai un problème "simple", je veux générer dans ma classe des paramètres étendus, en gros je vais rajouter des éléments mais je ne sais pas encore comment ils vont s’appeler.

Pour se faire je triche un peu et j'utilise deux matrices _nameExtendedData() et _valueExtendedData()

ce qui donne dans la définition

Code : Tout sélectionner

Private _nbExtendedData As Integer
Private _nameExtendedData()  As String
Private _valueExtendedData() As String
Et dans l'initialisation

Code : Tout sélectionner

Private Sub Class_Initialize()
        _nbExtendedData = 0
    ReDim _nameExtendedData(_nbExtendedData)
    ReDim _valueExtendedData(_nbExtendedData)
End Sub      '   Constructor
J'ai réussi à faire le get :

Code : Tout sélectionner

Public Property GET extendedData(ByVal nameExtendedData As String)
    Dim i As Integer
    extendedData=""
    if _nbExtendedData>0 then
        for i=1 to _nbExtendedData
            if (_nameExtendedData(i)=nameExtendedData) then
                extendedData=_valueExtendedData(i)
            end if
        next i
    end if
End Property
Que j'appelle ainsi :

Code : Tout sélectionner

test = pt.extendedData("nom de la variable en String")
Mais pour le LET j'ai essayé moulte choses qui ne fonctionnent pas,

mais je voudrais l'utiliser comme ceci

Code : Tout sélectionner

pt.extendedData("nom de la variable en String")="valeur en String"
La définition qui me semble la plus proche de la solution est la suivante

Code : Tout sélectionner

Public Property LET extendedData(ByVal nameExtendedData As String, valueExtendedData As String)
String, ByVal valueExtendedData As String)
    Dim i As Integer
    Dim newExtendedData As Boolean
    if _nbExtendedData<=0 then
        newExtendedData=true
    else
        newExtendedData=true
        for i=1 to _nbExtendedData
            if _nameExtendedData(i)=nameExtendedData then
                newExtendedData=false
                _valueExtendedData(i)=valueExtendedData
                exit for
            end if
        next i
    end if
    if newExtendedData then
        _nbExtendedData=_nbExtendedData+1
        ReDim Preserve _nameExtendedData(_nbExtendedData),_valueExtendedData(_nbExtendedData)
        _nameExtendedData(_nbExtendedData) = nameExtendedData
        _valueExtendedData(_nbExtendedData)= valueExtendedData
    end if
End Property
Quelque soit ma façon d'appeler ceci j'ai un message d'insulte "Erreur d'exécution du BASIC. L'argument n'est pas facultatif" (en gros valueExtendedData n'est jamais vu)
j'ai essayé des trucs divers qui m'envoient tous ce même message.
Mes essais :

Code : Tout sélectionner

	pt.extendedData="fff"
	pt.extendedData("eeee")="fff"
	pt.extendedData("eeee","rrrr")="fff"
Merci à ceux qui auront lu jusqu'ici :p

A+
Dernière modification par Xunor le 06 août 2018 08:56, modifié 1 fois.
Programmeur relativement expérimenté (on n'est jamais expert ;) )
Débutant Open Office (adieu Microsoft et ses incompatibilités)
principalement avec Apache OpenOffice 4.1.6 sous Windows 10 Famille
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

Re: [Basic] LET "à 2 entrées" : gérer des paramètres étendus

Message par Hubert Lambert »

Bonjour,

Un conseil avant toute chose : OpenOffice peut être automatisé au moyen de divers langage de script (Basic, Python, Javascript...).
Il me semble que, quitte à débuter dans ce domaine, autant choisir un langage plus évolué et plus puissant, comme python qui t'épargnera beaucoup de peines dans le genre de celle qui précède... :wink: .
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)
Xunor
NOOuvel adepte
NOOuvel adepte
Messages : 16
Inscription : 02 août 2018 11:02

Re: [Basic] LET "à 2 entrées" : gérer des paramètres étendus

Message par Xunor »

Hubert Lambert a écrit :Bonjour,
Il me semble que, quitte à débuter dans ce domaine, autant choisir un langage plus évolué et plus puissant, comme python qui t'épargnera beaucoup de peines dans le genre de celle qui précède... :wink: .
Je suis d'accord avec toi,
je comptais programmé en basic puis reprogrammer en python :p
J'aime les chalenges ;)
Mais pour le moment je me cantonne au basic :D
Programmeur relativement expérimenté (on n'est jamais expert ;) )
Débutant Open Office (adieu Microsoft et ses incompatibilités)
principalement avec Apache OpenOffice 4.1.6 sous Windows 10 Famille
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: [Basic] LET "à 2 entrées" : gérer des paramètres étendus

Message par Piaf »

Bonjour
Je ne suis pas programmeur donc pas forcément tout compris à ton histoire de classe :lol:
D'après ce que j'ai compris, en Basic l'utilisation de [Basic] Utilisation du service EnumerableMap devrait faire l'affaire.
A+
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Xunor
NOOuvel adepte
NOOuvel adepte
Messages : 16
Inscription : 02 août 2018 11:02

Re: [Basic] LET "à 2 entrées" : gérer des paramètres étendus

Message par Xunor »

Merci piaf, je vais jeter un œil à EnumerableMap, j'étudie ça et je vois si ça réponds à mon problème.
Pour info les classe ça sert à définir un type de variable compliqué comme par exemple une voiture, avec le nombre de porte, son nom, son proprio, sa couleur etc...
Programmeur relativement expérimenté (on n'est jamais expert ;) )
Débutant Open Office (adieu Microsoft et ses incompatibilités)
principalement avec Apache OpenOffice 4.1.6 sous Windows 10 Famille
Avatar de l’utilisateur
rollmops
PassiOOnné
PassiOOnné
Messages : 669
Inscription : 20 déc. 2017 14:45

Re: [Basic] LET "à 2 entrées" : gérer des paramètres étendus

Message par rollmops »

Bonjour,

La POO fait l'objet d'un tutoriel : https://forum.openoffice.org/fr/forum/ftopic36492.html
OpenOffice 4.1.15 - Windows 10
Xunor
NOOuvel adepte
NOOuvel adepte
Messages : 16
Inscription : 02 août 2018 11:02

Re: [Basic] LET "à 2 entrées" : gérer des paramètres étendus

Message par Xunor »

rollmops a écrit :Bonjour,

La POO fait l'objet d'un tutoriel : https://forum.openoffice.org/fr/forum/ftopic36492.html
Merci rollmops, j'ai déjà lu est relu ce tutoriel, j'ai cherché sur le net et la doc et n'ai rien trouvé.
Ce tutoriel correspond à une utilisation simple, et ne permet pas de gérer des paramètres étendus (ou alors je n'ai pas vu :D )

Merci tout de même pour cette piste !
A+ ;)
Programmeur relativement expérimenté (on n'est jamais expert ;) )
Débutant Open Office (adieu Microsoft et ses incompatibilités)
principalement avec Apache OpenOffice 4.1.6 sous Windows 10 Famille
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

Re: [Basic] LET "à 2 entrées" : gérer des paramètres étendus

Message par Hubert Lambert »

Le langage basic utilisé pour OpenOffice n'a rien à voir avec le vba de Microsoft Office.
Les développeurs d'OpenOffice ont néanmoins fait en sorte que ce dernier soit partiellement interprétable dans OpenOffice moyennant l'instruction préalable "option compatible".
Ce support du vba est toutefois trompeur car très limité, et ne dépasse pas un usage relativement simple.

Dans ton cas spécifique, OpenOffice ne permet pas l'utilisation de plusieurs arguments avec l'instruction "property let". Donc aucune chance d'obtenir ce que tu veux de cette manière.
Le plus simple a priori, si tu persistes dans cette voie sans issue, est de remplacer ton "get" par une fonction et ton "let" par un "sub".

Par exemple, en reprenant la suggestion de piaf :

Code : Tout sélectionner

private _extendeddata as variant

private sub class_initialize
    _extendeddata = com.sun.star.container.EnumerableMap.create("string", "string")
end sub

public function getproperty(key as string) as string
    getproperty = _extendeddata.get(key)
end function

public sub setproperty(key as string, value as string)
    _extendeddata.put(key, value)
end sub

public sub setproperties(keys(), values())
    for n = 0 to ubound(keys())
        _extendeddata.put(keys(n), values(n))
    next n
end sub
ce qui donne (si le module s'appelle Xunor) :

Code : Tout sélectionner

sub main
    set maclasse = new Xunor

    maclasse.setproperty("aaa", "bbb")
    msgbox maclasse.getproperty("aaa")    '= bbb
    
    maclasse.setproperty("aaa", "zzz")
    msgbox maclasse.getproperty("aaa")    '= zzz
    
    maclasse.setproperties(array("ccc", "ddd"), array("eee", "fff"))
    msgbox maclasse.getproperty("ccc")    '= eee
    msgbox maclasse.getproperty("ddd")    '= fff
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)
Xunor
NOOuvel adepte
NOOuvel adepte
Messages : 16
Inscription : 02 août 2018 11:02

Re: [Basic] LET "à 2 entrées" : gérer des paramètres étendus

Message par Xunor »

Hubert Lambert a écrit :Le langage basic utilisé pour OpenOffice n'a rien à voir avec le vba de Microsoft Office.
Dans ton cas spécifique, OpenOffice ne permet pas l'utilisation de plusieurs arguments avec l'instruction "property let". Donc aucune chance d'obtenir ce que tu veux de cette manière.
Le plus simple a priori, si tu persistes dans cette voie sans issue, est de remplacer ton "get" par une fonction et ton "let" par un "sub".
Comme tu dis : vois sans issue, j'avais fabriquer un getter et un setter avec un sub avant de voir ton message :D
En me disant : en attendant c'est pas si mal :D
Il faut savoir se casser les dents sur certains problèmes pour savoir ensuite lesquels sont insolubles et lesquels ne le sont pas vraiment ;)
Un grand Merci
Programmeur relativement expérimenté (on n'est jamais expert ;) )
Débutant Open Office (adieu Microsoft et ses incompatibilités)
principalement avec Apache OpenOffice 4.1.6 sous Windows 10 Famille