[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 !

[OXT] Comparaison inexacte sous LibreOffice Calc

Messagepar Hubert Lambert » 16 Juin 2016 10:02

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   AgrandirRéduire
=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é 64 fois
pystring_exemples.ods
exemples d'utilisation de pystring
(24.98 Kio) Téléchargé 80 fois
AOOo 4.1.2 sur Win7
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
Hubert Lambert
SuppOOrter
SuppOOrter
 
Message(s) : 1000
Inscrit le : 06 Avr 2016 08:26

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

Messagepar office29 » 16 Juin 2016 10:57

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
office29
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 17
Inscrit le : 13 Juin 2016 16:09

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

Messagepar Hubert Lambert » 16 Juin 2016 11:06

Merci d'avance pour tes tests.
Et oui, le problème est identique sous Windows et sous Linux...
AOOo 4.1.2 sur Win7
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
Hubert Lambert
SuppOOrter
SuppOOrter
 
Message(s) : 1000
Inscrit le : 06 Avr 2016 08:26

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

Messagepar office29 » 16 Juin 2016 11:10

Pareil, AOO retourne VRAI, alors que LibO retourne FAUX sous Manjaro.
Libre Office 5.0.3.2
Linux Mint 17.3
office29
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 17
Inscrit le : 13 Juin 2016 16:09

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

Messagepar gerard24 » 16 Juin 2016 13:33

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.1.4 sous Windows 10.
pour télécharger LibreOffice
Avatar de l’utilisateur
gerard24
ManitOOu
ManitOOu
 
Message(s) : 3098
Inscrit le : 06 Juil 2008 18:08
Localisation : dans le Périgord

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

Messagepar Hubert Lambert » 16 Juin 2016 15:31

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.2 sur Win7
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
Hubert Lambert
SuppOOrter
SuppOOrter
 
Message(s) : 1000
Inscrit le : 06 Avr 2016 08:26

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

Messagepar zeguedon » 16 Juin 2016 17:06

Bonjour,

Une autre piste de réflexion :
Code : Tout sélectionner   AgrandirRéduire
=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   AgrandirRéduire
=PYSTRING("upper";"test")

et
Code : Tout sélectionner   AgrandirRéduire
=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 4.1.5
LibreOffice 5.4.5.1
Ubuntu 18.04 LTS
zeguedon
ManitOOu
ManitOOu
 
Message(s) : 2565
Inscrit le : 02 Juil 2014 18:25

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

Messagepar Hubert Lambert » 16 Juin 2016 18:00

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.2 sur Win7
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
Hubert Lambert
SuppOOrter
SuppOOrter
 
Message(s) : 1000
Inscrit le : 06 Avr 2016 08:26

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

Messagepar gerard24 » 16 Juin 2016 20:02

Je ne sais pas si cela peu faire avancer le schmilblick, mais LO utilise une version plus récente de Python.
OOodidacte
LibreOffice 6.1.4 sous Windows 10.
pour télécharger LibreOffice
Avatar de l’utilisateur
gerard24
ManitOOu
ManitOOu
 
Message(s) : 3098
Inscrit le : 06 Juil 2008 18:08
Localisation : dans le Périgord

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

Messagepar Hubert Lambert » 16 Juin 2016 20:38

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   AgrandirRéduire
#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.2 sur Win7
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
Hubert Lambert
SuppOOrter
SuppOOrter
 
Message(s) : 1000
Inscrit le : 06 Avr 2016 08:26

Re: [OXT] Comparaison inexacte sous LibreOffice Calc

Messagepar Jurassic Pork » 09 Août 2017 23:29

hello,
peut-être un indice supplémentaire :
lorsqu'on utilise la fonction EPURAGE (CLEAN) sur Pystring l'égalité fonctionne :
Code : Tout sélectionner   AgrandirRéduire
=EPURAGE(PYSTRING("upper";"test"))=EPURAGE(PYSTRING("upper";"test"))

renvoie bien vrai
Ami calmant, J.P
LibreOffice 6.1.x sous windows 10 et LibreOffice 6.0.x sous linux - OpenOffice 4.1.5 sous windows 10
Avatar de l’utilisateur
Jurassic Pork
Membre cOOnfirmé
Membre cOOnfirmé
 
Message(s) : 220
Inscrit le : 09 Août 2017 23:15

Re: [OXT] Comparaison inexacte sous LibreOffice Calc

Messagepar Jurassic Pork » 11 Août 2017 10:30

hello,
un autre indice :
dans l'assistant de fonction de calc sur la formule
Code : Tout sélectionner   AgrandirRéduire
=PYSTRING("upper";"TiTi")

on peut voir que le résultat est : {"TITI"}
tandis que sur la formule :
Code : Tout sélectionner   AgrandirRéduire
=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 6.1.x sous windows 10 et LibreOffice 6.0.x sous linux - OpenOffice 4.1.5 sous windows 10
Avatar de l’utilisateur
Jurassic Pork
Membre cOOnfirmé
Membre cOOnfirmé
 
Message(s) : 220
Inscrit le : 09 Août 2017 23:15

Re: [OXT] Comparaison inexacte sous LibreOffice Calc

Messagepar Hubert Lambert » 11 Août 2017 12:59

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.2 sur Win7
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
Hubert Lambert
SuppOOrter
SuppOOrter
 
Message(s) : 1000
Inscrit le : 06 Avr 2016 08:26


Retour vers Macros et API

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Roby68 et 3 invité(s)