Ho inviato questa mail stamattina ma non è ancora apparsa in lista
Vediamo se questa arriva...


Il 06/03/2012 14:05, [email protected] ha scritto:
[....]
Il 06/03/2012 00:36, Valerio Messina ha scritto:
ciao, sto cercando di implementare il calcolo della parità binaria,
che manca tra le funzioni di OO.

Sarebbe opportuno specificare se si sta usando OOo o Libò, visto che
i due prodotti cominciano a divergere (per ora marginalmente) La
specifica è ancora più importante se si parla di programmazione.

la mia intenzione è di farlo funzionare con OO, l'ho specificato nella mail e
ho scritto alla mail-list di OO. Se poi va anche su LO molto meglio.


Ad
esempio, in OOo non esiste a livello API una funzione "DEC2BIN"

A livello di API non so niente, ma la funzione DEC2BIN esiste in OO 3.3 Calc
sezione funzioni "Add-in". Io ce l'ho sia su Ubuntu che su Windows, senza aver
aggiunto pacchetti Add-in. Ce l'ho solo io?

si, esiste nella sezione sdd-in ma non si chiama "DEC2BIN" ma "DECIMALE.BINARIO" A livello API invece non si possono usare i nomi locali delle formule perciò occorre usare il cosiddetto "programmatic name" che in questo caso è
"com.sun.star.sheet.addin.Analysis.getDec2Bin"

Perciò il tuo codice per funzionare avrebbe dovuto richiamare la funzione in questo modo:

----------
v = 23
svc = CreateUnoService ("com.sun.star.sheet.FunctionAccess")
arg1 = Array (v, 10)
result = _
svc.callFunction("com.sun.star.sheet.addin.Analysis.getDec2Bin",arg1)
print result
----------

perciò nel tuo esempio e nella tua prima esposizione ci sono parecchie cose strane dal mio punto di vista.

Forse usi una localizzazione USA ma anche in questo caso, quando si fanno domande sulle funzioni di Calc, almeno specificare se si usa una versione o una localizzazione particolare sarebbe di aiuto.


La mia richiesta di aiuto era perché vorrei richiamare questa funzione di Calc
dal codice Basic.
Ora mi fai venire il sospetto che "builtin" non siano le funzioni di Calc?

sono funzioni aggiuntive mantenute in un pacchetto separato ma che viene comunque installato insieme a OOo


A dire il vero a OO mancano anche tutte le funzioni di
manipolazione a bit.

Interessante, si tratta di funzioni presenti in altri prodotti
concorrenti?

in LO 3.5 ci sono queste funzioni nel gruppo Mathematical:
BITAND, BITLSHIFT, BITOR, BITRSHIFT, BITXOR (che mi sono reimplementato in OO
con il Basic, ma che accettano argomenti già in binario),

ecco, vorrei dare un occhiata al codice delle funzioni che hai già reimplementato. è possibile?



oltre alle trigonometriche: CSC, CSCH, SEC, SECH


In ogni caso il calcolo della parità necessita solo di BITRSHIFT,
BITXOR e BITAND. Dato che l'argomento del mio foglio è decimale,
vorrei prima invocare la DEC2BIN nel codice Basic.

Perchè?

perché vorrei evitare di inserire nel foglio due funzioni nidificate:

A1=23
=NOT(DEC2BIN(A1))
ma solo:
=NOT(A1)

perché la formula della parità ha già 5-6 livelli di parentesi.


si ma non ha senso convertire la rappresentazione dei numeri in binario (rappresentazione che non esiste e perciò deve essere simulata mediante una stringa) prima di passarli ad una funzione Basic che lavora con i numeri



probabilmente perchè stai cercando di eseguire il NOT su una stringa

sospettavo, quindi NOT si aspetta un numero, e la DEC2BIN restituisce una
stringa?

si



Come devo fare per avere il negato bit a bit del valore in A1?
Esempio:


A1=23  (cioé 10111 in binario)
=NOT(A1)
ottenere 01000 come risultato

la funzione NOT di Calc (NON nella localizzazione italiana) non funziona bit per bit perciò devi creare una semplice funzione BitNOT in Basic

Function BitNOT(vValue As Variant) As Variant
    BitNOT = NOT vValue
End Function

(senza usare conversioni)

saluti
Paolo M

Rispondere a