PDA

Visualizza la versione completa : inStr: vediamo se sei pari o dispari


dvcappie
29-05-2002, 13:21
Ciao a tutti,
ho un problema con la funzione inStr (di visual basic):

ho una variabile che contiene = "abcde"

adesso nasce il problema

devo riuscire a sapere la prima lettera che lettera ,
la seconda che lettera , la terza che lettera , la quarta che lettera ...ecc...

fatto questo per, in base a che lettera e quale posizione occupa nella stringa(cio se "a" al terzo posto dispari e vale 5, se al secondo pari e vale 7)
questi valori "numerici" devono andare a finire in una variabile e sommarsi tra di loro"
inStr()va bene, ma come funziona? io no capisco quelle lunghe righe.
GRAZIE DAVVERO, PER FAVORE SE MI POSTATE UN ESEMPIO, ME LO SPIEGATE.
Grazie a tutti, Davide

riky78
29-05-2002, 14:03
non ho capito molto per:

dim pari as boolean
dim i as long
pari=false 'All'inizion dispar (posizione 1)
str="Pippo"
for i=1 to len(str)
carattere=mid(str,i,1) 'prendi il carattere i-esimo
if pari then
pari=false
'calcoli
else
pari=true
'caloli
end if
next i

se non va bene cerca di spiegare meglio cosa ti serve....

dvcappie
29-05-2002, 15:29
putroppo finir per scrivere le stesse cose:

ho una variabile= "abcdefghilmno"

a tutte le lettere nelle posizioni pari devo assegnare un valore numerico che cambia secondo la lettera

lo stesso vale per quelle lettere nella posiozione dispari.

"a c e g i m o" sono in posizioni dispari poich la a si trova al primo posto, la c al terzo e cos via...

"b d f h l n" sono in posizioni pari poich la b si trova al secondo posto, la d al terzo e cos via.

ogni lettera ha un valore numerico diverso. due lettere uguali ma in posizioni una pari e una dispari hanno valori diversi.
QUESTO IL PROBLEMA
GRAZIE, Davide

riky78
29-05-2002, 15:39
con il codice di prima riesci a stabilire sia il carattere, sia se questo in posizione pari o dispari...
puoi inizializzare un array in modo da associare ad ogni carattere un valore (a=1, b=2,....) poi, ad esempio, se il carattere nella posizione pari lo lasci invariato, se nella dispari ci aggiungi un 0.5, cosi la stringa "abbca" diventa:

1.5 2 2.5 3 1.5

dvcappie
29-05-2002, 15:59
ti ringrazio, solo che nell'esempio di prima tu hai scritto:

dim pari as boolean ' ok, dichiari una variabile di tipo booleana
dim i as long 'v. di tipo long
pari=false 'All'inizion dispar (posizione 1) ' assegni false, ok.
str="Pippo" 'questa la stringa
for i=1 to len(str) ' dall'inizio alla fine della stringa
carattere=mid(str,i,1) 'prendi il carattere i-esimo
if pari then ' da qui hai parlato solo inglese,
' non hai scritto del codice vb
' cio hai scritto carattere= mid dall'inizio alla fine della stringa.
ammettiamo che da il numero 5 tu gli dici che se pari ecc...
ma che ne sa lui... :)
per lui pari uguale a si o no
se mi esce 5 vb come fa a sapere se pari o dispari....?
ti ringrazio molto per mi hai parlato in molta teoria, anche io riesco a scrivere il concetto a parole, in vb che non ci riesco.

riky78
29-05-2002, 16:07
la funzione mid(string,start,lungezza) con i parametri str,i,1 ti restituisce il carattere della stringa alla posizione i, quindi nel ciclo for i=1 to len(str) ti restituisce uno alla volta tutti i caratteri dal primo all'ultimo (finiranno in Carattere).
Per sapere se un carattere in una posizione pari o dispari usi la varibile booleana pari (se uguale a True il carattere nella posizione pari).
Visto che parti dalla posizione 1 imposti pari a False e ad ogni ciclo cambi lo stato di pari (puoi anche fare pari=not pari)
Spero di essermi spiegato meglio, se no dimmi pure...

dvcappie
29-05-2002, 16:29
caro riky, ti ringrazio.
ho capito qualcosa in pi.
il problema questo
stavo facendo un programma che facesse il cod fiscale,
sull'ultima lettera mi sono bloccato.
c' chi mi ha consigliato questo come in un esempio di programma, ma visto che io non lo riesco a capire(per questo caos funziona)
non lo posso usare.
mica mi riesci a spiegare questo carnevale?
oppure ancora pi bello, mi puoi mica spiegare un altro modo per ottenere lo stesso risultato?
grazie, davide

TempNum = 0
I = 1
Do
' I DISPARI
AppoNum = InStr("B1A0KKPPLLC2QQD3RRE4VVOOSSF5TTG6UUH7MMI8NNJ9WWZZYY XX", Mid(TxtCodFis, I, 1))
TempNum = TempNum + ((AppoNum - 1) And &H7FFE) / 2
I = I + 1
If I > 15 Then Exit Do

' I PARI
AppoNum = InStr("A0B1C2D3E4F5G6H7I8J9KKLLMMNNOOPPQQRRSSTTUUVVWWXXYY ZZ", Mid(TxtCodFis, I, 1))
TempNum = TempNum + ((AppoNum - 1) And &H7FFE) / 2
I = I + 1
Loop
TempNum = TempNum Mod 26
TxtCodFis = TxtCodFis & Mid$("ABCDEFGHIJKLMNOPQRSTUVWXYZ", TempNum + 1, 1)

riky78
29-05-2002, 16:57
Se ho capito bene questo codice serve solo x mettere l'ultimo carattere di nel codice fino a quel punto creato?

Be, in AppoNum va (x il ciclo i-esimo) la posizione del carattere i-esimo della stringa TxtCodFis all'interno della cost

B1A0KKPPLLC2QQD3RRE4VVOOSSF5TTG6UUH7MMI8NNJ9WWZZYY XX

x i dispari e

A0B1C2D3E4F5G6H7I8J9KKLLMMNNOOPPQQRRSSTTUUVVWWXXYY ZZ

x i pari

non mi molto chiaro il calcolo di TempNum....
comunque questo alla fine viene usato prendendo il resto della sua divisione x 26 e utilizzando come ultima lettera la lettera dell'alfabeto corrispondente a questo resto.

Mi sa che questa un passaggio obbligatorio per la crazione del CF, quindi anche quelle due costanti...
L'unica cosa i cui non riesco ad aiutarti

TempNum = TempNum + ((AppoNum - 1) And &H7FFE) / 2

x il resto spero che sia chiaro....

Loading