Page 1 sur 1

[OXT] Comparaison inexacte sous LibreOffice Calc

Publié : 16 juin 2016 09:02
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:

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

Publié : 16 juin 2016 09:57
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.

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

Publié : 16 juin 2016 10:06
par Hubert Lambert
Merci d'avance pour tes tests.
Et oui, le problème est identique sous Windows et sous Linux...

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

Publié : 16 juin 2016 10:10
par office29
Pareil, AOO retourne VRAI, alors que LibO retourne FAUX sous Manjaro.

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

Publié : 16 juin 2016 12:33
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"
:?:

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

Publié : 16 juin 2016 14:31
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.

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

Publié : 16 juin 2016 16:06
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+

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

Publié : 16 juin 2016 17:00
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 ! 

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

Publié : 16 juin 2016 19:02
par gerard24
Je ne sais pas si cela peu faire avancer le schmilblick, mais LO utilise une version plus récente de Python.

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

Publié : 16 juin 2016 19:38
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: .

Re: [OXT] Comparaison inexacte sous LibreOffice Calc

Publié : 09 août 2017 22:29
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

Re: [OXT] Comparaison inexacte sous LibreOffice Calc

Publié : 11 août 2017 09:30
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

Re: [OXT] Comparaison inexacte sous LibreOffice Calc

Publié : 11 août 2017 11:59
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.