[OXT] Comparaison inexacte sous LibreOffice Calc

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 !
Répondre
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 09:26

[OXT] Comparaison inexacte sous LibreOffice Calc

Message par Hubert Lambert »

Bonjour à tous,

Je vous propose ci-dessous une petite extension qui ajoute une fonction PYSTRING dans Calc. Une fois installée, la fonction apparaît dans la catégorie "Texte" de l’assistant fonctions.
PYSTRING permet d’invoquer, depuis Calc, les méthodes de chaînes de caractères propres au langage python (voir le classeur exemple). À quelques exceptions près, ces méthodes n’ont pas d’équivalent parmi les fonctions natives et constituent donc un complément intéressant. L’utilité d’une telle fonction apparaîtra sans doute réduite pour beaucoup, mais puisqu’elle me sert régulièrement, j’ai pensé que ce pouvait être le cas pour d'autres.

PYSTRING fonctionne parfaitement sous OpenOffice. Elle fonctionne de même sous LibreOffice, avec toutefois un comportement inédit : toute comparaison incluant cette fonction renvoie FAUX, même lorsque le résultat est à l’évidence identique, comme dans

Code : Tout sélectionner

=PYSTRING("upper";"test")=PYSTRING("upper";"test")
J’ai retourné le problème dans tous les sens, sans parvenir à comprendre où se situe le problème ou l’erreur, ni en quoi LibreOffice peut différer d’OpenOffice sur un simple test d’égalité.
Un grand merci d'avance à tous ceux qui pourraient m'éclairer sur cette question ! :wink:
Pièces jointes
pystring.oxt
Donne accès aux méthodes de chaîne de caractères de python
(4.07 Kio) Téléchargé 228 fois
pystring_exemples.ods
exemples d'utilisation de pystring
(24.98 Kio) Téléchargé 246 fois
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)
office29
NOOuvel adepte
NOOuvel adepte
Messages : 17
Inscription : 13 juin 2016 17:09

Re: [Calc][oxt] Comparaison inexacte sous LibreOffice avec a

Message par office29 »

Bonjour,

Vous avez moyen de tester LibO sous windows ?
J'ai installé Mandrajo sur une VirtualBox, AOO y est assez facile à installer. Je vais tester votre exemple et mon classeur.
Libre Office 5.0.3.2
Linux Mint 17.3
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 09:26

Re: [Calc][oxt] Comparaison inexacte sous LibreOffice avec a

Message par Hubert Lambert »

Merci d'avance pour tes tests.
Et oui, le problème est identique sous Windows et sous Linux...
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)
office29
NOOuvel adepte
NOOuvel adepte
Messages : 17
Inscription : 13 juin 2016 17:09

Re: [Calc][oxt] Comparaison inexacte sous LibreOffice avec a

Message par office29 »

Pareil, AOO retourne VRAI, alors que LibO retourne FAUX sous Manjaro.
Libre Office 5.0.3.2
Linux Mint 17.3
Avatar de l’utilisateur
gerard24
ManitOOu
ManitOOu
Messages : 3160
Inscription : 06 juil. 2008 19:08
Localisation : dans le Périgord

Re: [Calc][oxt] Comparaison inexacte sous LibreOffice avec a

Message par gerard24 »

Bonjour,

J'ai effectué un petit test dans ton classeur avec ta formule :
=PYSTRING("upper";"test")=PYSTRING("upper";"test")
ou encore =PYSTRING(A8;B8)=PYSTRING(A8;B8)
et comme toi, j'obtiens FAUX.

Si je vais dans les options de calcul et que je décoche "Respecter la casse", j'obtiens VRAI.
Par contre, j'ai toujours FAUX pour =PYSTRING(A8;B8)="Elzévir"
:?:
OOodidacte
LibreOffice 6.4.5 sous Windows 10.
pour télécharger LibreOffice
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 09:26

Re: [Calc][oxt] Comparaison inexacte sous LibreOffice avec a

Message par Hubert Lambert »

Bonjour Gérard,

Un tout grand merci pour tes tests, et surtout pour ce début de piste !
J'ai testé mille choses, mais pas celle-là... Je vais voir si ça me mène quelque part.
Très bonne soirée.
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)
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 19:25

Re: [Calc][oxt] Comparaison inexacte sous LibreOffice avec a

Message par zeguedon »

Bonjour,

Une autre piste de réflexion :

Code : Tout sélectionner

=PYSTRING("upper";"test")&""=PYSTRING("upper";"test")&""
retourne VRAI. Le fait d'ajouter rien ("") ou autre chose annule l’inégalité. Ce qui me laisse penser que la dernière expression est peut-être suivie d'un caractère invisible genre fin de ligne, mais après tentative de collage du résultat obtenu avec

Code : Tout sélectionner

=PYSTRING("upper";"test")
et

Code : Tout sélectionner

=PYSTRING("upper";"test")&""
dans un éditeur de texte, je n'aperçois aucune différence. :roll:

En tous cas joli travail.

A+
Comment baliser [Résolu] ?
AOO
LibreOffice
Sous Linux
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 09:26

Re: [Calc][oxt] Comparaison inexacte sous LibreOffice avec a

Message par Hubert Lambert »

Bonjour zeguedon,

Un grand merci. C'est très bien vu : dès qu'on apporte une modification à la valeur retournée par PYSTRING, la comparaison redevient cohérente.
Ton approche a en outre le mérite d'offrir un contournement aisé pour vérifier l'égalité.
Mais j'avoue que je sèche encore sur la cause du problème.
Suite au message de gerard24, j'ai creusé un peu du côté des bogues liés à l'utilisation d'openCL, qui se rapprochent de ce cas-ci et ne concernent que LibO, mais sans réel succès jusqu'ici.
Merci encore pour votre aide à tous.
 Ajout : Il faut ajouter que la comparaison n'est incorrecte que pour les chaînes de caractères. Si la fonction renvoie un nombre, la comparaison est toujours correcte ! 
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)
Avatar de l’utilisateur
gerard24
ManitOOu
ManitOOu
Messages : 3160
Inscription : 06 juil. 2008 19:08
Localisation : dans le Périgord

Re: [Calc][oxt] Comparaison inexacte sous LibreOffice avec a

Message par gerard24 »

Je ne sais pas si cela peu faire avancer le schmilblick, mais LO utilise une version plus récente de Python.
OOodidacte
LibreOffice 6.4.5 sous Windows 10.
pour télécharger LibreOffice
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 09:26

Re: [Calc][oxt] Comparaison inexacte sous LibreOffice avec a

Message par Hubert Lambert »

En effet, mais j'ai oublié de préciser que la valeur retournée par PYSTRING est toujours un tableau de tableaux, même pour une valeur unique (c'est une contrainte pour s'adapter à tous les cas).
Mes premiers essais, avec une fonction qui renvoyait une simple chaîne, ne posent aucun problème de ce type. Donc a priori la version de python n'est pas en cause. :?
À titre d'info, voici la définition de la fonction :

Code : Tout sélectionner

#include <com/sun/star/uno/XInterface.idl>
 
module org { module openoffice { module sheet { module addin {
 
    interface XPyString
    {
        sequence< sequence< any > > pystring( [in] string method, [in] sequence< sequence< string > > basestring, [in] any param1, [in] any param2, [in] any param3);
    };
 
}; }; }; };
 Ajout : 17.6.2016 
Je continue à creuser ce problème, mais ça ne fait que l'obscurcir :? .
Ainsi, suite à la remarque de gerard24, j'ai décoché l'option de calcul "Respecter la casse". Ceci rétablit bien l'égalité entre deux fonctions PYSTRING identiques... mais renvoie en réalité toujours VRAI, même si les deux fonctions PYSTRING ont un résultat totalement différent.

Ou, pour résumer : que pourrait comparer au juste LibO pour toujours renvoyer FAUX ou VRAI quelles que soient les chaînes affichées, et quel peut être le rapport avec cette option ?
J'avoue que je suis près de rendre les armes :shock: .
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)
Avatar de l’utilisateur
Jurassic Pork
PassiOOnné
PassiOOnné
Messages : 623
Inscription : 10 août 2017 00:15

Re: [OXT] Comparaison inexacte sous LibreOffice Calc

Message par Jurassic Pork »

hello,
peut-être un indice supplémentaire :
lorsqu'on utilise la fonction EPURAGE (CLEAN) sur Pystring l'égalité fonctionne :

Code : Tout sélectionner

=EPURAGE(PYSTRING("upper";"test"))=EPURAGE(PYSTRING("upper";"test"))

renvoie bien vrai
Ami calmant, J.P
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
Avatar de l’utilisateur
Jurassic Pork
PassiOOnné
PassiOOnné
Messages : 623
Inscription : 10 août 2017 00:15

Re: [OXT] Comparaison inexacte sous LibreOffice Calc

Message par Jurassic Pork »

hello,
un autre indice :
dans l'assistant de fonction de calc sur la formule

Code : Tout sélectionner

=PYSTRING("upper";"TiTi")

on peut voir que le résultat est : {"TITI"}
tandis que sur la formule :

Code : Tout sélectionner

=EPURAGE(PYSTRING("upper";"TIti"))
le résultat est : TITI

Que représente le {} dans le premier résultat ? un élément matriciel ? un élément de tableau ?

Ami calmant, J.P
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 09:26

Re: [OXT] Comparaison inexacte sous LibreOffice Calc

Message par Hubert Lambert »

Bonjour, et merci pour le retour ;-)

En fait PYSTRING renvoie toujours une matrice, même si le résultat n'est qu'une cellule. Malheureusement ça n'explique pas l'erreur avec le seul LibreOffice et sur les seules matrices retournées par cette extension...
Je soupçonne que cela a un rapport avec les dernières modifications dans l'implémentation de PyUno, mais je n'ai pas encore eu le courage de me plonger dedans.
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)
Répondre