Il 07/03/2012 15:07, [email protected] ha scritto:
[.....]
Dunque: ho provato ora su OO3.3 USA, su WinXP, le due funzioni:
Function tra (val)
val = 23
svc = CreateUnoService ("com.sun.star.sheet.FunctionAccess")
arg = Array (val, 10)
tra = svc.callFunction ("com.sun.star.sheet.addin.Analysis.getDec2Bin", arg)
print tra
End Function
Function trb (val)
val = 23
svc = CreateUnoService ("com.sun.star.sheet.FunctionAccess")
arg = Array (val, 10)
trb = svc.callFunction ("Dec2Bin", arg)
print trb
End Function
fanno esattamente la stessa cosa.
Cioè non ottieni un errore, tuttavia il metodo callFunction secondo la
documentazione prende in argomento il "programmatic name" della funzione
e NON il nome locale.
http://www.openoffice.org/api/docs/common/ref/com/sun/star/sheet/XFunctionAccess.html#callFunction
Per qualche coincidenza (voluta o meno) il metodo è tollerante e accetta
anche il nome locale della funzione, ma come dice il saggio:
non si può programmare confidando nelle "botte di culo" perchè la
fortuna prima o poi ti abbandonerà e la tua macro smetterà di funzionare
e tu non saprai nemmeno perché.
Quindi il mio suggerimento è quello di usare il "nome programmatico"
delle funzioni.
Tempo fa avevo postato (forse nel NG di ooo) un modo per ricavare una
tabella di corrispondenza tra i nomi localizzati delle funzioni di Calc
e i corrispettivi nomi interni o "programmatici". Appena ripesco il post
te lo giro.
[....]
Lo sospettavo ma è difficile e frustrante darti supporto se le
informazioni che fornisci sono vaghe e incomplete.
sorry, non posso usare la version italiana, o meglio, mi piacerebbe avere i
menù in italiano, ma non posso permettermi di avere le formule di CALC
tradotte.
Devo per forza usare le formule con il nome USA, l'unico modo che ho trovato è
usare il menù in inglese.
Non ci siamo capiti: a me non interessa se tu usi LO oppure OOo, non mi
interessa se usi la versione in lingua italiana o vulcaniana o inglese.
Sono felicissimo se ti trovi bene con la versione USA e se a casa usi LO
Il problema è che se fai delle domande tecniche in una ML e fornisci
informazioni imprecise, tutti quelli che dovessero cercare di aiutarti
perderebbero un sacco di tempo e tu difficilmente otterresti una soluzione.
[...]
Anche questo non quadra per nulla:
Non esiste *nessun* modo per scrivere un numero binario in una cella.
- Puoi scrivere una stringa che *somiglia* ad un binario.
- Puoi scrivere un intero decimale che *somiglia* ad un binario, ma
- non puoi scrivere un numero binario
Come dicevo nel primo post sarebbe bene evitare confusione tra il
concetto di numerale e la sua rappresentazione.
ok, ancora ho scritto in modo impreciso,
riprovo:
Il contenuto della cella è un numero (decimale), che usa solo le cifre 1 e 0,
per cui può rappresentare un numero binario.
può solo nella tua mente!! per l'interprete basic se nel codice scrivi
1101 è solo un numero intero compreso tra 1100 e 1102
Su queste celle, le mie misere funzioncine da principiante funzionano.
Così a occhio non sta in piedi neanche con i puntelli.
I numeri sono numeri, non farti confondere dalla rappresentazione usata!!
Non è che se un numero decimale "somiglia" ad un numero binario allora
l'interprete lo tratta diversamente (se fosse così bisognerebbe
ammazzare il programmatore che ha concepito una simile oscenità)
Cmq, a scanso di equivoci, mi fai un esempio con i numeri da usare e i
passaggi per arrivare al risultato?
In realtà la differenza tra formattazione e contenuto mi è ben chiara, perché
in C c'è lo stesso concetto di Calc.
Io invece ho l'impressione che continuiamo a girare attorno a questo punto.
Tornando al tuo codice, se io passo alle tue funzioni dei numeri
decimali che somigliano a dei numeri binari non ottengo nulla di
speciale in quanto la funzione li tratta come numeri decimali qualsiasi
(e vorrei pure vedere il contrario ;)
però poi le funzioni del Basic: AND, XOR e OR trattano quei numeri bit a bit,
e non come numero decimale,
Anche qui è presente il solito malinteso sulla rappresentazione dei
numeri e il loro "valore"
Secondo te può esistere una versione speciale di XOR che tratta in modo
diverso un numero rappresentato in decimale dallo stesso numero
rappresentato in esadecimale o in ottale ?
Secondo la docu XOR lavora con i numeri interi
questo è un numero intero: &H223
anche questo è un numero intero &O1051
anche questo è un numero intero: 553
e infatti se io in basic scrivo
print 14 xor 9
print &HE xor &O11
print &O16 xor 9
il risultato è sempre 7, che è perfettamente corretto comunque tu lo
voglia rappresentare
quindi funzionano per quello che serve a me (ok è un metodo fast&dirty lo
ammetto).
Funzionano e basta. Non c'è nulla di fast & dirty :-)
Ovviamente invece non funzionano se gli passo dei numeri che usano le cifre 2-
9
Ovviamente? io non vedo nulla di ovvio, mi sembra anzi contro ogni
logica che l'interprete basic si metta a fare discriminazioni delle
cifre da 2 a 9!!
Cmq, fai un esempio numerico e riproducibile (descrivere tutti i
passaggi, risultato atteso e risultato ottenuto)
Inoltre non mi funziona la NOT del Basic nemmeno con numeri che sembrano
binari, boh.
Questa poi :-)
Sembrano binari a TE ma l'interprete Basic non lo freghi...
Cmq anche in questo caso sarebbe utile un esempio documentato
P.S. se penso che in C è così semplice calcolare la parità bit a bit ... ;-))
solo che poi non avrei tutte le altre comodità di Calc.
Io non so come si programma in C ma su internet ho trovato questo:
----------------
int a=147;
int b=97;
int c=a^b; //XOR
printf("c è uguale a %d", c);
----------------
ora lo stesso in StarBasic:
----------------
a=147
b=97
c=a XOR b
print "c è uguale a", c
----------------
Francamente non vedo tutta 'sta differenza.
ciao
paolo m
---------------------------------------------------------------------
Per cancellarsi: [email protected]
Per informazioni: http://www.openoffice.org/it/
Per avviare una nuova discussione: [email protected]
Archivi: http://mail-archives.apache.org/mod_mbox/incubator-ooo-utenti-it