Newsgroup: it.comp.lang.visual-basic
Titolo: If ed OR

If variabile = valore1 or valore2 or valore3
end if
Viene preso dal compilatore ma poi non funziona in esecuzione.
Come si definisce la sintassi corretta dell'if con l'or?

 ha scritto nel messaggio
news:9us5qu8frh4dc7oj6...@4ax.com...

La sintassi corretta, nel tuo caso è
If variabile = valore1 or variabile = valore2 or variabile = valore3
altrimenti viene fatto, se non ricordo male, un or "bitwise" sui tre
distinti elementi
Salutoni
Sergio

direi
if variabile=valore1 or variabile=valore2 or variabile=valore3 then
end if
quella che hai scritto tu prima valuta tutte la parte destra:
ritorna True se almeno uno dei tre valori (valore1, valore2 o valore 3) è
True, dove per True si intende <>0)......
good coding!!!
--
Igor Damiani
ig...@igordamiani.it
http://www.igordamiani.it
ICQ : 11847262

good coding!!!
Mi conviene usare un CASE allora?

beh, dipende......con un select-case fai una cosa diversa a seconda del
valore di "variabile", quindi....
select case variabile
    case 1:
        'fai una cosa
    case 2:
        'fai un'altra cosa
    case 3:
        'fai un'altra cosa ancora
end select
dipende.......


dipende.......
Mhmhmhmh allora non fa per me!!!
io devo in effetti contare le variabili A E I O U ed a e i o u in una
stringa
ecco il codice:
Private Sub cmdVocali_Click()
Dim I%, vocalcount%
stringa = Text1.Text
For I% = 1 To Len(stringa)
    If Mid(stringa, I%, 1) = ("a" Or "e" Or "i" Or "o" Or "u") Then
        vocalcount% = vocalcount% + 1
    End If
Next I%
MsgBox "Sono presenti " & vocalcount% & " vocali nella frase!!!"
End Sub
a parte il fatto che cosě prendo solo le vocali minuscole e quelle
maiuscole no, come posso snellire l'istruzione if????
Grazie

beh, innanzitutto puoi usare la funzione UCase per fare in modo di lavorare
sulla stringa in stampatello maiuscolo: guarda l'help per vedere come
usarla......
in questo modo, confronti solamente A E I O U, senza preoccuparti di quelli
minuscole......
poi, non credo che puoi snellirla piů di tanto: la sintassi č quella che ti
abbiamo detto!
:-))
non usare il % per dichiarare le variabili, toglilo!! e nell'istruzione Dim
metti il tipo, ovvero:
Dim I as Integer, vocalcount as Integer
cosě velocizzi il codice ed č un po' piů leggibile!!
good coding!!!


perņ, aspetta, forse puoi usare un select veramente.....dunque, se fai:
Private Sub cmdVocali_Click()
Dim I as integer, vocalcount as integer
Dim Car as String, Stringa as String
stringa = UCase(Text1.Text)
For I = 1 To Len(stringa)
Car=Mid(Stringa,I,1)
Select Case Car
    Case "A" Or "E" or "I" or "O" or "U":
        vocalcount=vocalcount+1
End Select
Next I
MsgBox "Sono presenti " & vocalcount & " vocali nella frase!!!"
End Sub
scritto un po' al volo, ma dovrebbe andare bene!!!
good coding (a me, stavolta!)


 End Select
if instr(1,Car,"AEIOU") > 0 vocal...
o no ?
Saluti

 Mi conviene usare un CASE allora?
Sì, io lo uso perchè diventa più compatto e leggibile ed ha esattamente lo
stesso funzionamento in OR
Select Case variabile
Case valore1, valore2, valore3
    ' v1, v2 o v3
Case Else
    ' altrimenti
End Select
Quello che facevi tu, dato che l'= è il simbolo con la minore precedenza in
assoluto è un OR tra tutti e tre i valori e poi il confronto tra variabile e
il risultato dei due OR.
Ciao
--
' // Initialize the expression evaluator
Engines.Evaluator = CreateObject("
http://www.neodatatype.net
")
' // you can find resources for and from the NG here!
Me.SitoComune = "
http://www.it-lang-vb.net
"

sě, in effetti č ancora piů compatto e veloce, perň non va ancora bene,
semmai.....
if instr(1,UCase(Stringa),"AEIOU") > 0 vocalcount=vocalcount+1
Instr va applicato alla stringa intera e non a Car! giusto?
piů conciso di cosě non si puň, credo....
:-)))
good coding!!!
--
Damiani Liborio Igor
ig...@igordamiani.it
 - 
dam...@italiainfiera.it
 - 
idam...@hotmail.com
http://www.igordamiani.it
ICQ : 11847262

 più conciso di così non si può, credo....
emm hai circonciso troppo e ti sei magnato un "THEN" ?
un GigioPignoloOccasionale

 Instr va applicato alla stringa intera e non a Car! giusto?
Beh, il tuo dubbio è lecito. Sicuro che funzioni come hai scritto?
Io metterei Car al posto di Stringa...

 Instr va applicato alla stringa intera e non a Car! giusto?
Nonono. Stai contando e sei in un loop di Mid$...
Facciamo un bel mix, riassumendo:
******
Private Sub cmdVocali_Click()
    ' i long sono più veloci degli integer, finchè lavoriamo a 32 bit
    Dim I As Long, VocalCount As Long
    ' a lunghezza fissa "dovrebbe" occupare di meno ed essere più veloce.
    Dim StrTemp As String * 1
    Dim Stringa As String
    Stringa = Text1.Text
    For I = 1 To Len(Stringa)
        ' notare l'uso delle funzioni con $
        StrTemp = UCase$(Mid$(Stringa, I, 1))
        ' InStr per default parte già da 1, se non trova niente restituisce 0, quindi
        If InStr("AEIOU", StrTemp) Then VocalCount = VocalCount + 1
    Next I
    MsgBox "Sono presenti " & VocalCount & " vocali nella frase."
End Sub
******
...scommetto che Maurizio Borrelli potrebbe migliorarla ancora :-).
Bye, G.

c'hai ragione, Lupo, l'Instr va applicato a Car, così controllo un carattere
alla volta.....
Private Sub cmdVocali_Click()
Dim I as integer, vocalcount as integer
Dim Car as String, Stringa as String
stringa = UCase(Text1.Text)
For I = 1 To Len(stringa)
    Car=Mid(Stringa,I,1)
    if instr(1,Car,"AEIOU") > 0 then vocalcount=vocalcount+1
Next I
MsgBox "Sono presenti " & vocalcount & " vocali nella frase!!!"
End Sub
però posso dire una cosa?
questo qui sopra è il codice "definitivo", però mi sembra poco ottimizzato,
nel senso che vado a richiamare la funzione Instr per ogni carattere, il che
mi sembra lento.....
a questo punto, forse, preferisco la mia soluzione iniziale, quella che
usava il Select-Case.....o no????
cioè quello indicato nel post delle 17:33.....che mi dite???
ciao!!!


 usava il Select-Case.....o no????
Non ho provato, ma io applicherei (non fosse altro per la leggibilità) senza
dubbio il Select Case

For I = 1 To Len(stringa)
    Select Case Ucase(Mid(Stringa,I,1)
        Case "A","E","I","O","U"


"Paperino" <non...@lo.dico> ha scritto
    ' a lunghezza fissa "dovrebbe" occupare di meno ed essere più veloce.
    Dim StrTemp As String * 1
No. ;-) (Prova ad eseguire commentando o meno il * 1). Comunque più veloce
del Select Case.
Quest'ultimo migliora se si mette il $:  Select Case UCase$(Mid(Stringa, I,
1))
Private Sub Form_Load()
    Dim I As Long, VocalCount As Long
    ' a lunghezza fissa "dovrebbe" occupare di meno ed essere più veloce.
    Dim StrTemp As String * 1
    Dim Stringa As String
    Stringa = "aabbccddeeffgghhiijjkkllmmnnooppqqssttuuvvzz"
'        Con Instr$
    t = Timer
    VocalCount = 0
    For n = 1 To 10000
        For I = 1 To Len(Stringa)
            ' notare l'uso delle funzioni con $
            StrTemp = UCase$(Mid$(Stringa, I, 1))
            ' InStr per default parte già da 1, se non trova niente
restituisce 0, quindi
            If InStr("AEIOU", StrTemp) Then VocalCount = VocalCount + 1
        Next I
    Next n
    MsgBox Timer - t
'    Con Select Case
    t = Timer
    VocalCount = 0
    For n = 1 To 10000
        For I = 1 To Len(Stringa)
            Select Case UCase(Mid(Stringa, I, 1))
                Case "A", "E", "I", "O", "U"
                    VocalCount = VocalCount + 1
            End Select
        Next I
    Next n
    MsgBox Timer - t
End Sub

 Quest'ultimo migliora se si mette il $:  Select Case UCase$(Mid(Stringa, I, 1))
E migliora ancora con due $ :-)
        Select Case UCase$(Mid$(Stringa, I, 1))
Ennesimo esempio del fatto che ci vogliono i $$$ per far andare veloci
le cose :-)))
Un Paperino "ah, ecco perché si dice M$ !" ;-)

 le cose :-)))
:))

 Un Paperino "ah, ecco perché si dice M$ !" ;-)
Ecco, questo lo incorniciamo.
Niente di più vero, niente di più documentato.
Metodo sperimentale.
PS: Se con 2$ migliora, proviamo a offrirgliene 5...

Ciao
Ho risolto cosě:
For I = 1 To Len(stringa)
car = Mid(stringa, I, 1)
    Select Case car
    Case "A", "E", "I", "O", "U", "a", "e", "i", "o", "u": vocalcount
= vocalcount + 1
    Case Else:  consonantcount = consonantcount + 1
    End Select
Next I
ma come escludo tutti i caratteri di punteggiatura? Esse vengono
(giustamente) contati in consonantcount!!!

 ha scritto nel messaggio > Ho risolto così:


?
Cavolo è vero, allora come posso sintetizzare e in + eliminare dal
consonantcount gli elementi di punteggiatura quali . , !"£$%& etc?