Newsgroup: it.comp.appl.access
Titolo: Confrontare due stringhe carattere per carattere

Devo confrontare due stringhe carattere per carattere
e per posizione.
Ho fatto questo.L'idea è quella di estrarmi dalla prima stringa 
(strStringaA) un carattere alla volta e vedere se nella stessa
posizione della strStringaB c'è lo stesso carattere.
Il problema è che la seguente riga di codice mi restituisce sempre
0.
intPosizioneB = InStr(I + 1, strStringaB, strCarattere, vbBinaryCompare)
Function Analizza
Dim strCarattere As String
Dim intPosizioneA As Integer
Dim intPosizioneB As Integer
Dim I As Integer
strStringaA = "ABC"
strStringaB = "ABC"
For I = 1 To Len(strStringaA)
     strCarattere = Mid(strStringaA, I, 1)
     intPosizioneA = I
     intPosizioneB = InStr(I + 1, strStringaB, strCarattere, 
vbBinaryCompare)
Next I
etc.etc.
me la date una controllata?
Ciao
Morgan

 
Mi rispondo da solo
For I = 1 To Len(strStringaA)
     strCarattereA = Mid(strStringaA, I, 1)
     strCarattereB = Mid(strStringaB, I, 1)
     intX = StrComp(strCarattereA, strCarattereB, vbBinaryCompare)
     If intX = 0 Then
     Else
     MsgBox "Trovata occorrenza non coerente.", vbInformation, "Attenzione"
     End If
Next I
anche se ,non so ma non mi piace molto...
Morgan

Morgan
Se strStringaA č piů lunga di strStringaB, quando I raggiunge il valore pari alla lunghezza di strStringaA+1, si
verifica un errore eseguendo Mid(strStringaB, I, 1)
Vincenzo Turturro
---------------------------------------------
il sito comune di it.comp.appl.access:
http://www.sitocomune.com/
---------------------------------------------
E quello di it.comp.as400
http://www.faq400.com/
---------------------------------------------

 ha scritto nel messaggio 
news:45a20664$0$19092$4faf...@reader4.news.tin.it...

Se il confronto riguarda solo due stringhe, il problema è relativo. Ma se 
devi confrontare molte stringhe (penso ad un elenco di codici fiscali) 
allora ti conviene usare due array ed operare il confronto su questi. Se, 
poi, ai singoli array passi dei Byte invece delle String, il confronto sarà 
ancora più veloce. Grosso modo così:
Function comparestr(sS1, sS2) As Long
    Dim cbS1() As Byte, cbS2() As Byte
    Dim iMax As Long, iChr As Long
    Dim iDiff As Long
    iDiff = 0
    cbS1 = Trim(sS1)
    cbS2 = Trim(sS2)
    iMax = UBound(cbS1)
    For iChr = LBound(cbS1) To iMax
        If cbS1(iChr) <> cbS2(iChr) Then
            iDiff = iDiff + 1
        End If
    Next iChr
    comparestr = iDiff
End Function
La funzione (di ObiWan, MVP di mpiv) restituisce il numero delle 
diseguaglianze trovate (la uso per confrontare codici fiscali, appunto).
Ovviamente, le due stringhe si presuppongono di lunghezza eguale.
Ciao.
eSQueL 

Morgan ha scritto:

Mi spieghi lo scopo...?
Da come fai pare che realizzi semplicement eun confronto... perchè
allora devi ciclare i singoli caratteri...?
Mi sono perso un pezz...?
@Alex

eSQueL ha scritto:

Rispondo qui a tutti
Chiaramente le stringhe devono essere della stessa lunghezza e questo
me lo controllo a parte.
Le stringhe in questione rappresentano sequenze proteiche tipo
ma in futuro potrebbero essere sequenze di acidi nucleici (AATGTA)
questo è un esempio di sequenza,l'ho presa daun sito.
QQATNVRATYHYYRPAQNNWDLGAPAVSAYCATWDASKPLSWRSKYGWTAFCGPAGAHGQ
ASCGKCLQVTNPATGAQITARIVDQCANGGLDLDWDTVFTKIDTNGIGYQQGHLNVNYQF
VDCRD
volevo  appunto controllare se la sequenza fosse identica ed 
eventualmente quali caratteri non coincidono ed in che posizione.
a me sembra che come ho fatto funzioni, cmq adesso mi studio la funzione
di ESQuel.
Morgan

>>> e per posizione.
[CUT]
Aggiungo che ho provato la funzione postata da eSQuel ma mi è solo
parzialmente utile in quanto restituisce solo ilnumero di caratteri 
differenti.
Ecco un esempio completo di quello che ho fatto
Sequenza A QQATNVRATYHYYRPAQNNWDLGAPAVSAYCATWDASKPLSWRSKYGWTAFCGPAGAHGQ
Sequenza B ASCGKCLQVTNPATGAQITARIVDQCANGGLDLDWDTVFTKIDTNGIGYQQGHLNVNYQF
Function Analizza(strStringaA As String, strStringaB As String) As String
Dim strCarattereA As String
Dim strCarattereB As String
Dim strCaratteri As String
Dim strPosizioni As String
Dim i As Integer
Dim intX As Integer
strPosizioni = ""
strCaratteri = ""
For i = 1 To Len(strStringaA)
     strCarattereA = Mid(strStringaA, i, 1)
     strCarattereB = Mid(strStringaB, i, 1)
     intX = StrComp(strCarattereA, strCarattereB, vbBinaryCompare)
     If intX = 0 Then
     Else
     strCaratteri = strCaratteri & strCarattereA & " / " & strCarattereB 
& " , "
     strPosizioni = strPosizioni & "/" & CStr(i)
     End If
Next i
     Analizza = "Posizione caratteri: " & Chr(13) & Chr(10) & 
strPosizioni & " " & Chr(13) & Chr(10) & "Caratteri diversi " & Chr(13) 
& Chr(10) & strCaratteri
End Function
da cui ottengo una cosa del genere a video.
Le due sequenze sono diverse.
Posizione caratteri:
/1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/18/19/20/21/22/23/24/25/26/27/28/29/30/31/32/33/34/35/36/37/38/39/40/41/42/43/44/45/46/47/48/49/50/51/52/53/54/55/56/57/58/59/60 
Caratteri diversi
Q / A , Q / S , A / C , T / G , N / K , V / C , R / L , A / Q , T / V , 
Y / T , H / N , Y / P , Y / A , R / T , P / G , N / I , N / T , W / A , 
D / R , L / I , G / V , A / D , P / Q , A / C , V / A , S / N , A / G , 
Y / G , C / L , A / D , T / L , W / D , D / W , A / D , S / T , K / V , 
P / F , L / T , S / K , W / I , R / D , S / T , K / N , Y / G , G / I , 
W / G , T / Y , A / Q , F / Q , C / G , G / H , P / L , A / N , G / V , 
A / N , H / Y , G / Q , Q / F ,
Morgan