Newsgroup: it.comp.lang.visual-basic
Titolo: AND e OR

Salve a tutti.
Il mio problema è il seguente.
Ho una checklist composta in questa maniera:
ID_VOCE | DESCRIZIONE
Devo salvare il risultato di questa checklist (al massimo 128 voci) in una
variabile double (8 byte = 128 bit)
Per salvare uso una variabile x valorizzata inizialmente a 0 e la metto in
or con 2 elevato alla ID_VOCE-1 (devo partire dal bit 0)
x = x OR 2 ^ (ID_VOCE-1)
Per testare la condizione metto la mia variabile x già valorizzata in AND
con 2 elevato alla ID_VOCE-1.
if x AND 2 ^ (ID_VOCE-1) = 2 ^ (ID_VOCE-1) then checkl=True
Ma, anche se non ho flaggato tutti gli elementi della checklist me li mette
tutti a True.
Il problema è sorto perché devo salvare il mio double in un
varchar da 16... azz.

 variabile double (8 byte = 128 bit)
Scusate ho sbagliato a fare i conti (8*8 = 64)


 x = x OR 2 ^ (ID_VOCE-1)
Non puoi usare gli operatori di bit sui floating point, perchp VB li 
converte in long.
L'unica alternativa è un array di byte/long o un Type di byte/long e se 
proprio vuoi, con una funzioncina vai a testare il byte che ti serve.
Ciao

Quindi nella mia stringa ogni carattere rappresenterebbe un gruppo di 8
condizioni e quindi un elemento del mio array di byte??

 Ciao
 
 Ciao
--------------------------------
Inviato via 
http://usenet.libero.it


 Scusa puoi postare il ciclo che dovrebbe fare questa operazione se ti va?


 varchar da 16... azz.
Ma una bella matrice di Boolean ti fa proprio schifo ?...
--
Er Roscio.

 significato fare di questi obbrobri.
  Vabbè mo non esageriamo, certo come è scritto sicuramente può dargli
problemi, perchè senza parentesi quella condizione funziona male.



  Non postare altro codice come ti ho chiesto nel post piů in alto non serve.
  La condizione cosě com'č non funziona perchč mancano le parentesi, prova
scrivere cosě
     if (x AND 2 ^ (ID_VOCE-1)) = (2 ^ (ID_VOCE-1)) then checkl=True
  ancora meglio
    if (x AND 2 ^ (ID_VOCE-1)) then checkl=True
  ancora di piů
     checkl= ((x AND 2 ^ (ID_VOCE-1)) <> 0)
Ciao


 Er Roscio.
un varchar è un campo di un database... non mi risulta che io possa mettere
matrici di boolean in un varchar, comunque ho risolto.
Non so perché qualcuno qua si sente in diritto di fare il professore e si
prende la briga di dire come uno DEVE FARE  senza sapere nemmeno il contesto
in cui uno lavora.

Ok il ciclo funziona :) - Posto qua.
Private Function Crea_Dati_Checklist() As String
    Dim z As Integer
    Dim j As Integer
    Dim x(0 To 15) As Byte
    Dim s As String
    Dim index As Integer
    'x = 0
    For z = 0 To 1
        For j = 0 To lstCheckList(z).ListCount - 1
            index = Int((lstCheckList(z).ItemData(j) - 1) / 8)
            If lstCheckList(z).Selected(j) Then
                x(index) = x(index) Or 2 ^ (lstCheckList(z).ItemData(j) - (8
* index) - 1)
            End If
        Next
    Next
    For j = 0 To UBound(x)
        s = s & Chr(x(j))
    Next
    Crea_Dati_Checklist = s
    Debug.Print s
End Function
Private Sub Leggi_Dati_CheckList()
    Dim z As Integer
    Dim j As Integer
    Dim park As Integer
    Dim index As Integer
    Dim x(0 To 15) As Byte
    Dim s As String
    s = Mid(frm_rs("dati_op"), 7, 16)
    For j = 0 To UBound(x)
        x(j) = Asc(Mid(s, j + 1, 1))
    Next
    For z = 0 To 1
        For j = 0 To lstCheckList(z).ListCount - 1
            index = Int((lstCheckList(z).ItemData(j) - 1) / 8)
            park = 2 ^ (lstCheckList(z).ItemData(j) - (index * 8) - 1)
            If (x(index) And park) = park Then lstCheckList(z).Selected(j) =
True
        Next
    Next
End Sub
Grazie Zanna per avermi aperto gli okki!!! :))

 Grazie Zanna per avermi aperto gli okki!!! :))
  Si, ma guarda che scritto come si deve funzionava anche come avevi fatto tu
sai! La storia del double trasformato in long non mi convince per nulla, il
problema era che la condizione era sbagliata cosi come era scritta...cmq se
a te va bene cosi meglio...
Ciaooo


 in cui uno lavora.
Perché le cose si possono fare male o bene.
Se tu vuoi continuare a farle male, affari tuoi.
Io non ci guadagno nulla a insegnarti come si lavora.
--
Er Roscio.

 Io non ci guadagno nulla a insegnarti come si lavora.
  Roscio sei di Roma? Che lavoro fai?
 Ciao


Scusa ma la condizione l'avevo buttata lě, non avevo fatto copia e incolla
del codice.
Comunque per quanto riguarda il double non ho provato, visto che ormai mi
son smazzato le routines.
Lo so che č un modo antico di procedere, ma pensa a un database che cresce
di 10000 record al giorno e soprattutto pensa ad una tabella in questo
database che non ha dati omogenei.
Tipo una tabella task che si porta dietro i campi
ID_TASK,id_operazione,serialno,dati_operazione
dove serialno č il numero di serie del prodotto in linea e dati_operazione č
un campo di testo (lungo 30 da specifica prog)
i cui dati inseriti sono interpretati a seconda del campo id_operazione.
Questo fa sě che io possa inserire in linea nuovi moduli software senza
rivoltare il database ma comporta anche che alcune volte bisogna
scervellarsi un po' di + per ottenere ad esempio una relazione uno a molti )

   Roscio sei di Roma? Che lavoro fai?
No sono di Brescia.
Per quanto riguarda il lavoro sviluppo software, da un paio d'anni.


  Veramente la domanda era :
  "Roscio sei di Roma?"
  e non
  "Spugna sei di Roma?"
LoL


AH AH!

 scervellarsi un po' di + per ottenere ad esempio una relazione uno a
molti )
Beh, se lo scopo č quello di scervellarsi, allora hai ragione tu.
Divčrtiti !...
--
Er Roscio.

   Roscio sei di Roma? Che lavoro fai?
No, non sono di Roma.
Mi occupo di informatica dal 74, anno di nascita
del modello relazionale... :-)))
--
Er Roscio.

Lo so che non è il modo + corretto ma siccome l'analista non sono io faccio
silenzio e programmo.
Ho solo 22 anni non sono un guru come voi.

 del modello relazionale... :-)))
Non sapevo di essere un modello relazionale :)
Ciao

 Non sapevo di essere un modello relazionale :)
Stai attento a non farti normalizzare troppo.
E comunque, mai oltre la 5^ f.n. ... ;-)))
--
Er Roscio.

E comunque, mai oltre la 5^ f.n. ... ;-)))
Altrimenti diventa un ritratto cubista :-)
-- 
ciao, hal