[Résolu][Basic] Affectation de valeur par défaut en paramètre optionnnel de type String sous Linux

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 !
gelinp
Membre OOrganisé
Membre OOrganisé
Messages : 58
Inscription : 12 mars 2011 20:40

[Résolu][Basic] Affectation de valeur par défaut en paramètre optionnnel de type String sous Linux

Message par gelinp »


La modération vous a écrit: Titre modifié pour plus de clarté.
Toutes les questions sur ce forum sont forcément des problèmes.
Veillez à ne pas employer de terme implicite à l'avenir.
Veillez à faire preuve d'inventivité pour refléter le problème exposé.
Un titre explicite n'est pas pour vous mais pour tous ceux effectuant des recherches.

Bonjour,

J’utilise LibreOffice sur 3 PCs (2 sous Windows et 1 sous Linux) pour tester les valeurs par défaut dans un programme basic. Et sur mon poste Linux (voir configuraiton ci-dessous) mon programme de test ne fonctionne pas. Le problème est que sous ma configuration Linux le paramètre optionnel de type String (je n’ai pas encore testé les autres types) n’est pas initialisé à sa valeur par défaut et dans le corps de la procédure ce même paramètre est indiqué manquant (IsMissing(param) = True) …

Mon programme de test TestMacroAvecParametresOptionnels.odt (14.7 KB) est en pièce jointe.

Dans les 3 configurations testées j’utilise la même version de LibreOffice 7.4.6.2. Ma configuration diffère seulement pour Java utilisé :
  • Sous Linux j’utilise dans LibreOffice Java 18.0.1 2022-04-19
    Sous les 2 postes Windows 10 j’utilise dans LibreOffice réspectivement Java (Oracle) 19.0.2 2023-01-17 et Java Oracle Corp. 21-ea et le test fonctionne bien…
Ma question principale est :
Est-ce que le bon fonctionnement du langage LibreOffice basic dépendrait de la configuration Java installée ?

Sinon quel autre paramètre sous LibreOffice pourrait influencer ce fonctionnement ? Sinon encore faudrait-il signaler un bug ?

Merci bien pour votre aide…
Patrick
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par gelinp le 18 mai 2023 14:51, modifié 1 fois.
LibreOffice Version 7.4.6.2
Utilisation sur plusieurs systèmes d'exploitation (nomadisme sous windows et Linux)
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25602
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Basic] Problème d'affectation des valeurs par défaut des paramètres optionnnels de type String sous Linux ...

Message par Dude »

Salut,

Non, Java n'est pas indispensable pour du Basic mais il est fortement recommandé.
Pour t'en convaincre, il te suffit de désactiver le JRE et voir que ta macro fonctionne.

Linux est un terme générique. Il faudrait préciser de quelle distro il s'agit.
Préciser aussi quelle 7.4.6 est utilisée : version des dépôts ou officielle, installée via Snap.

Personnellement, voici le résultat sous Debian et OpenOffice :
capture.png
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
cwolan
Membre OOrganisé
Membre OOrganisé
Messages : 75
Inscription : 14 févr. 2021 22:15

Re: [Basic] Affectation de valeur par défaut en paramètre optionnnel de type String sous Linux

Message par cwolan »

Bonjour,
ㅤㅤ
Les questions ci-dessus ont également été posées sur Ask LibreOffice.
OpenOffice 1.1.5 – 4.1.15
LibreOffice 3.3.0.4 – 24.8
Windows 7,10,11 64-bit
gelinp
Membre OOrganisé
Membre OOrganisé
Messages : 58
Inscription : 12 mars 2011 20:40

Re: [Basic] Affectation de valeur par défaut en paramètre optionnnel de type String sous Linux

Message par gelinp »

Bonjour,

Pour Linux la version est :

Code : Tout sélectionner

System:    Host: gelin-desktop Kernel: 5.15.0-71-generic x86_64 bits: 64 Desktop: Cinnamon 5.0.7 Distro: Linux Mint 20.2 Uma
Et pour LibreOffice :

Code : Tout sélectionner

Version: 7.4.6.2 / LibreOffice Community
Build ID: 5b1f5509c2decdade7fda905e3e1429a67acd63d
CPU threads: 8; OS: Linux 5.15; UI render: default; VCL: gtk3
Locale: fr-FR (fr_FR.UTF-8); UI: fr-FR
Calc: threaded
Je viens de compléter mes tests sous Linux. Je m'aperçois que c'est seulement l'assignation de la valeur par défaut d'une chaine de caratère vide qui pose problème, cela sur un paramètre de type String ou Variant. Si je définie une valeur par défaut de chaine de carartère non vide, par exemple "*", alors l'assignation par défaut fonctionne bien.

Le message d'erreur est déclenché dans TObject à la ligne 70 :

Code : Tout sélectionner

If IsMissing(param) Then ...
et il est le suivant : Sous procédure ou procédure fonction non définie.

Mais ce n'est pas la fonction IsMissing qui ne serait pas définie, simplement le fait que la chaine de caractère assignée par défaut est la chaine vide ...

J'ajoute à nouveau le fichier test, car j'ai apporté quelques petites corrections : il manquait la déclaration Public et ce n'est pas une Function mais une procédure Sub qui porte test...
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice Version 7.4.6.2
Utilisation sur plusieurs systèmes d'exploitation (nomadisme sous windows et Linux)
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25602
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Basic] Affectation de valeur par défaut en paramètre optionnnel de type String sous Linux

Message par Dude »

Merci de répondre précisément aux questions que l'on te pose.
L'information que tu donnes ne permet pas de savoir si c'est :
Dude a écrit : 04 mai 2023 07:00 version des dépôts ou officielle, installée via Snap.
gelinp a écrit : 04 mai 2023 16:09 Le message d'erreur est déclenché dans TObject à la ligne 70 :
Publie également le code complet dans le message, cela nous évite d'avoir à télécharger des dizaines de document pour répondre.
gelinp
Membre OOrganisé
Membre OOrganisé
Messages : 58
Inscription : 12 mars 2011 20:40

Re: [Basic] Affectation de valeur par défaut en paramètre optionnnel de type String sous Linux

Message par gelinp »

1. La version LibreOffice 7.4.6.2 / LibreOffice community installée sur mon poste ne vient ni du dépôt Linux Mint ni de Snapp, elle est le paquet Debian proposé en téléchargement depuis le Site LibreOffice.
2. Le code produisant le bug est dans le module TOBject de mon code exemple et est ci-dessous recopié : c'est la première ligne de la procédure qui Bug avec l'appel à IsMissing(param) :

Code : Tout sélectionner

Public Sub TestDefaultStringValue(Optional param As String = "")
	If IsMissing(param) Then
		MsgBox "TEST IS WRONG : param is missing !"
	ElseIf param = "" Then
		MsgBox "TEST IS OK : param = '" & param & "' et Len(param) = " &  Len(param)
	Else
		MsgBox "Other problem : param = '" & param & "' et Len(param) = " &  Len(param)
	EndIf
End Sub
3. Je me suis aperçu que ce même code peut être modifié légèrement en affectant par défaut au paramètre un caractère plutôt que la chaine vide et alors le code fonctionne sans bugs, mais ce n'est pas ce que je veux faire, je dois pouvoir utiliser une chaine vide... :

Code : Tout sélectionner

Public Sub TestDefaultStringValue(Optional param As String = "*")
	If IsMissing(param) Then
		MsgBox "TEST IS WRONG : param is missing !"
	ElseIf param = "*" Then
		MsgBox "TEST IS OK : param = '" & param & "' et Len(param) = " &  Len(param)
	Else
		MsgBox "Other problem : param = '" & param & "' et Len(param) = " &  Len(param)
	EndIf
End Sub
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice Version 7.4.6.2
Utilisation sur plusieurs systèmes d'exploitation (nomadisme sous windows et Linux)
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25602
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Basic] Affectation de valeur par défaut en paramètre optionnnel de type String sous Linux

Message par Dude »

A quoi sert l'instruction Public pour une fonction ?
Poser une question, c'est bien. Répondre aux autres, c'est encore mieux.
Améliorez AOO et votez pour les issues
JPL
Membre lOOyal
Membre lOOyal
Messages : 35
Inscription : 17 mars 2012 10:16

Re: [Basic] Affectation de valeur par défaut en paramètre optionnnel de type String sous Linux

Message par JPL »

Pour ma part, l'usage de Optional est pertinent uniquement comme suit:

Code : Tout sélectionner

Function X(Optional param As Variant) As ...
et ceci pour 2 raisons (au moins ...).
  • Tous les types de variables ne sont pas compatibles avec Optional: String l'est (LO écrit "<Missing parameter>" dans la variable) mais pas Boolean p.ex., il n'y a pas de place pour un bit de "présence de l'argument", pas plus qu'un Boolean ne peut être Null.
  • Cette forme est compatible avec toutes les variantes d'options (pas d'option, Option Compatible, Option VBASupport 1). Voir à ce sujet les commentaires d'en-tête de https://git.libreoffice.org/core/+/8e32 ... 0f78%5E%21
Ce mode d'appel avec des arguments optionnels supprime les erreurs survenant dans ton code.

PS: le mot-clé Public pour une fonction/Sub est purement informatif et n'a pas d'incidence.
Kubuntu 22.04 / LibO 24.2
Access2Base (LibO).
BaseDocumenter extension (LibO)
ScriptForge (LibO) - Documentation on https://help.libreoffice.org/latest/en- ... bPAR=BASIC
gelinp
Membre OOrganisé
Membre OOrganisé
Messages : 58
Inscription : 12 mars 2011 20:40

Re: [Basic] Affectation de valeur par défaut en paramètre optionnnel de type String sous Linux

Message par gelinp »

OO/LibO Basic est un langage macro simple qui accepte tout de même un style de programmation 'object-oriented'. Suivez ce lien sur votre forum.... Dans tous les cas, j'ai déjà fait le test en dehors du module presque objet et j'obtiens le même bug ...
LibreOffice Version 7.4.6.2
Utilisation sur plusieurs systèmes d'exploitation (nomadisme sous windows et Linux)
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25602
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Basic] Affectation de valeur par défaut en paramètre optionnnel de type String sous Linux

Message par Dude »

Code : Tout sélectionner

Sub TestDefaultStringValue(Optional param As String = "")
Pour moi, le fait d'affecter une chaîne à ta variable optionnelle est une erreur. Qui plus est pour une Sub.
C'est dans la clause isMissing que tu déclareras le contenu manquant.
D'ailleurs l'aide F1 ne mentionne absolument pas cette syntaxe :
capture.jpg
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
gelinp
Membre OOrganisé
Membre OOrganisé
Messages : 58
Inscription : 12 mars 2011 20:40

Re: [Basic] Affectation de valeur par défaut en paramètre optionnnel de type String sous Linux

Message par gelinp »

Je ne suis pas d'accord avec vous : en algorithmique c'est toujours le fait de ne pas affecter une variable qui est une erreur...

L'affectation par défaut des paramètres est bien annoncée pour LibreOffice dans Option Compatible Statement, et je dois la déclarer obligatoirement avec l'option ClassModule de mon pseudo objet.

Le problème est simplement que l'affectation par défaut ne fonctionne pas avec les paramètres de type String, pour les autres c'est OK (hormis bien entendu aussi pour le type Object) ...

Aussi l'utilisation de l'option "ByVal" aurait peut-être été une aide pour contourner ce problème si elle était spécifiée dans la signature de la procédure appelée et non comme attribut supplémentaire ajouté par l'appelant...
LibreOffice Version 7.4.6.2
Utilisation sur plusieurs systèmes d'exploitation (nomadisme sous windows et Linux)