()
Newbie
Messaggi:
Iscritto:
|
salve ragazzi.....
qualche giorno fa' facendo alcuni test sul mio programma di p2p, mi sono imbattuto su un malfunzionamento piuttosto strano.......all'interno di un ciclo for al posto di nidificare if ne eseguo 1 con piu' and.......
esempio
questo codice mi funziona male:
Codice sorgente - presumibilmente Delphi |
if a = b and c=d and w=r then msgbox "ciao" end if
|
invece scritto cosi' mi funziona bene:
Codice sorgente - presumibilmente Delphi |
if a= b then if c=d then if w=r then msgbox "ciao" end if end if end if
|
il codice non e' ce mi desse degli errori, pero' il prog non mi funzionava bene......
ma usare piu' and all'interno di un if pensavo fosse la stessa cosa di mettere piu' if o mi sbaglio? |
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
|
Quali valori hanno le variabili quando il codice non funziona come ti aspetti?
Hai fatto delle prove di debugging?
|
|
()
Newbie
Messaggi:
Iscritto:
|
il codice postato sopra era solo un esempio giusto per spiegarmi....questo e' il codice che uso.......
confronto l'item di una collection con i dati del getdata del winsock
Codice sorgente - presumibilmente VB.NET |
For Each parola8 In collrichieste If Not parola8 = "" Then If Split(parola8, "£££$$$@@@;;;")(1 - 1) = "ricerca fonti per resume" Then If Split(parola8, "£££$$$@@@;;;")(2 - 1) = Split(data, "£££$$$@@@;;;")(2 - 1) Then If Split(parola8, "£££$$$@@@;;;")(3 - 1) = Split(data, "£££$$$@@@;;;")(3 - 1) Then trovato11 = True Exit For End If End If End If End If Next parola8
|
se io al posto di mettere piu' if ne metto uno con piu' and mi da un problema stranissimo, non mi esegue piu' il codic eche viene dopo next parola8.........
dopo next parola8 c'e un if not trovato11. cioe' se la variabile booleana trovato11 e' falsa deve eseguire del codce..........ed il codice non me lo esegue........invece nidificando gli if cosi' me lo esegue.......
Ultima modifica effettuata da il 01/07/2009 alle 22:37 |
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
|
Postato originariamente da muteblaster:
il codice postato sopra era solo un esempio giusto per spiegarmi....questo e' il codice che uso....... |
Beh ... potevi dirlo prima ... con le variabili, infatti, il problema non poteva esistere.
Invece, con tutte le Split che esegui, e' ovvio che puoi avere comportamenti diversi, dato che sono eseguite durante l'evaluation dell'espressione della if ...
Il codice che hai scritto, fra l'altro, non e' affatto ottimale e ti consiglio di cambiarlo ... ad esempio, al posto di
If Not parola8 = "" Then
e' meglio scrivere (per chiarezza)
If Len(parola8)>0 Then
Dopo di che, non si capisce perche' e in che modo usi tutte quelle Split ...
La Split deve essere UNA SOLA ovvero
arr = Split(parola8, "£££$$$@@@;;;")
seguita dalle if che ti servono. Ovvero, la prima sarà
If arr(0) = "ricerca fonti per resume" Then
mentre le altre non hanno senso e dovrai farci capire a che servono.
|
|
()
Newbie
Messaggi:
Iscritto:
|
ora ho capito il perhce' non funzionava correttamente......
quando un peer riceve una richiesta controlla se nella collection e' presente se non lo e' lo aggiunge.....la richiesta viene controllata in base al comando "ricerfa fonti" il secondo split che e' il codice hash , ed il terzo split che e' il virtual ip.......
se nella collection c'e' quel comando associato al quel codice hash a quel virtualip e' gia' in atto il temtativo di creare un rooting......
qesta era la idea che mi era venuta............
Ultima modifica effettuata da il 02/07/2009 alle 6:55 |
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
|
No ... non ti ho capito, scusa ma non hai risposto alla mia domanda ...
Questa riga
If Split(parola8, "£££$$$@@@;;;")(2 - 1) = Split(data, "£££$$$@@@;;;")(2 - 1) Then
non ha senso perche' stai paragonando due valori identici (che saranno per forza uguali) e non e' comunque ottimale perche', come ti ho detto prima, la Split va eseguita prima e una sola volta (per non parlare dell'inutile 2-1 ...)
|
|
()
Newbie
Messaggi:
Iscritto:
|
quella del 2-1 e' una fissa mia perche' il conteggio parte da 0 quindi il primo elemento e' e' 0 il secondo e' uno e per non entrare in errore metto 2-1........
non ho ben charo quello che mi dici, sono per forza uguali.....io nella collection inserisco tutti i comandi che il programma esegue....."cerca file" , "cerca hash", "cerca messaggi".....quindi il primo split della collection non e' per forza "ricerca fonti"..........se il primo elemento della collection e' "ricerca fonti" allora confronto anche il restante della stringa.........
|
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
|
Ma la if che ti ho evidenziato, secondo te, cosa vuol dire?
|
|
()
Newbie
Messaggi:
Iscritto:
|
vuol dire che se il primo split di parola8 e' uguale al primo split del data continuo ad esegure il codice........
|
|