L
LuigiB
Guest
Ciao Joe riassumo brevemente il discorso dell'operatore AND , provo a spiegarlo meglio.
L'operatore and è un operatore di congiunzione logica , i computer come sai non conoscono i numeri decimali ma solo i numeri binari.
Quando si mettono in AND due variabili che contengono un numero decimale , queste due variabili internamente sono viste in binario.
Si mettono uno sotto l'altro i due numeri binari e si fa l'operazione AND per ciascuna cifra del numero secondo le regole dell'algebra booleana
dove
0 and 0 = 0 false
0 and 1 = 0 false
1 and 0 = 0 false
1 and 1 = 1 true
dopo questa operazione si ottiene un terzo numero che è il risultato dell'operazione e che viene valutato dall'istruzione IF.
Questo numero pero potrebeb valere anche 0 dopo le operazioni suddette , ad esempio il caso in cui posizione restituisse prima 3 e poi 4
il tuo if
ora proviamo a fare l'operazione di and tra i numeri 3 e 4 , prima dobbiamo convertirli in binario
3 = 0011
4 = 0100
mettiamo in colonna i numeri binari e facciamo l'and tra le cifre con le regole suddette
0011
0100
_____
0000
si ottiene il numero binario 0 che vle 0 nche in decimale perciò è false ! Quindi anche se le posizioni erano valide l'if si trova a valutare un valore false.
quindi come si risolve ? Bisogna fare in modo che l'if valuti sempre 2 valori che possano essere solo true e false.
si puo fare o esplicitando
oppure racchiudendo il risultato di posizione nella funzione cbool che trasforma una valore in boolean
_________________
Riguardo gli archivi paralleli se ne possono creare solo 5 da programma , ora sinceramente non so se gli script siano in grado di gestire anche numeri superiori a 5 , forse.. la cosa se fosse possibile è dovuta solo alla parametrizzazione e non è propriamente voluta, prova a creare altri archivi che pero rispettino il formato del nome che hanno quell icreati da lui e vedi se funziona , sinceramente non lo so.
Comunque
Con AprFileBaseDati puoi aprire un file nello stesso formato del file della ase dati del programma e ci sono tutte le funzioni per leggere o scriverci le estrazioni.
Una volta che lo script ha quella come prima istruzione tutte le altre istruzioni lavorano con l'archivio impostato.
P.S.
Ad ogni modo per questioni di velocità è sempre meglio mettere gli if nidificati invece che sulla stessa riga anche se si scrive piu codice.
P.P.S.
Somo andato a verificare e non è possibile gesttire piu dei 5 archivi in nessun modo.
L'operatore and è un operatore di congiunzione logica , i computer come sai non conoscono i numeri decimali ma solo i numeri binari.
Quando si mettono in AND due variabili che contengono un numero decimale , queste due variabili internamente sono viste in binario.
Si mettono uno sotto l'altro i due numeri binari e si fa l'operazione AND per ciascuna cifra del numero secondo le regole dell'algebra booleana
dove
0 and 0 = 0 false
0 and 1 = 0 false
1 and 0 = 0 false
1 and 1 = 1 true
dopo questa operazione si ottiene un terzo numero che è il risultato dell'operazione e che viene valutato dall'istruzione IF.
Questo numero pero potrebeb valere anche 0 dopo le operazioni suddette , ad esempio il caso in cui posizione restituisse prima 3 e poi 4
il tuo if
Codice:
If Posizione(E,R,A,L) And Posizione(E,R,B,L) Then
è come dire
If 3 and 4 then
ora proviamo a fare l'operazione di and tra i numeri 3 e 4 , prima dobbiamo convertirli in binario
3 = 0011
4 = 0100
mettiamo in colonna i numeri binari e facciamo l'and tra le cifre con le regole suddette
0011
0100
_____
0000
si ottiene il numero binario 0 che vle 0 nche in decimale perciò è false ! Quindi anche se le posizioni erano valide l'if si trova a valutare un valore false.
quindi come si risolve ? Bisogna fare in modo che l'if valuti sempre 2 valori che possano essere solo true e false.
si puo fare o esplicitando
Codice:
If Posizione(E,R,A,L) >0 And Posizione(E,R,B,L) >0 Then
è come dire
If (è vero che posizione restituisce un numero > di 0 ?) and (è vero che posizione restituisce un numero > di 0 ?) then
oppure racchiudendo il risultato di posizione nella funzione cbool che trasforma una valore in boolean
Codice:
If cbool(Posizione(E,R,A,L)) And cbool(Posizione(E,R,B,L)) Then
_________________
Riguardo gli archivi paralleli se ne possono creare solo 5 da programma , ora sinceramente non so se gli script siano in grado di gestire anche numeri superiori a 5 , forse.. la cosa se fosse possibile è dovuta solo alla parametrizzazione e non è propriamente voluta, prova a creare altri archivi che pero rispettino il formato del nome che hanno quell icreati da lui e vedi se funziona , sinceramente non lo so.
Comunque
Con AprFileBaseDati puoi aprire un file nello stesso formato del file della ase dati del programma e ci sono tutte le funzioni per leggere o scriverci le estrazioni.
Una volta che lo script ha quella come prima istruzione tutte le altre istruzioni lavorano con l'archivio impostato.
P.S.
Ad ogni modo per questioni di velocità è sempre meglio mettere gli if nidificati invece che sulla stessa riga anche se si scrive piu codice.
P.P.S.
Somo andato a verificare e non è possibile gesttire piu dei 5 archivi in nessun modo.
Ultima modifica di un moderatore: