Newsgroup: it.comp.lang.visual-basic
Titolo: Controllare se una stringa è già presente in un array

Ciao, devo scrivere un pezzo di programma che leggendo delle stringhe da un
file in modo sequenziale mi dice quanti tipi di stringhe diverse incontro
es.
00001    00001    00003    00002    00001    00001    00002
leggendo questo per esempio devo solo dire 3 (00001, 00002, 00003) non mi
interessa elencarli.
Pensavo di fare un array di stringhe e ongni volta che ne incontro 1 guardo
se è già prensete nell'array. Se è presente proseguo alla prossima stringa
in caso contrario inserisco la stringa nell'array e incremento un contatore.
C'è un modo per veloce per sapere se nell'array di stringe è presente la
stringa che ho letto senza scrivermi il ciclo che scandisce la lista per
trovarne un'occorrenza?
Vi ringrazio per eventuali suggerimenti
ciao
-Davide-

 trovarne un'occorrenza?
se ne hai 10 no, scorrili uno alla volta.
se ne hai 10 milioni fatti una select su un db che fai prima.
ciao,
brand77

 interessa elencarli.
Con il variant Dato simulo la lettura da te proposta, che nel caso di file
sarebbe una scansione con line input
Private Sub Command1_Click()
    Dim Dato, N As Integer
    Dim Risulta As String
    Dato = Array("00001", "00001", "00003", "00002", "00001", "00001",
"00002")
    Risulta = ""
    For N = 0 To UBound(Dato)
        If InStr(1, Risulta, Dato(N) & ",") = 0 Then
            Risulta = Risulta & Dato(N) & ","
        End If
    Next N
    MsgBox Risulta
End Sub
beppe
------------------------------------------------------------
Visita il sito del WWF Alto Ferrarese
http://www.comune.cento.fe.it/wwfaf
------------------------------------------------------------

 interessa elencarli.
se hai elenchi molto lunghi in questi casi si puo usare un algoritmo di
hashing che identifica la stringa con un numero.
Però la cosa è alquanto complessa se non ti interessa una velocità elevata
lascia perdere.
ciao

 interessa elencarli.
[SNIP]
Puoi seguire il suggerimento di Franco relativo all'hashing in maniera molto
semplice, sfruttando cioe' gli algoritmi di hashing impliciti in alcuni
oggetti di VB, per esempio la Collection.
In pratica ad ogni stringa che incontri tenta di fare un aggiunta in una
collection, *usando la stringa stessa come chiave*: dato che stringhe uguali
generano la stessa chiave, la collection genera un errore di runtime che
puoi semplicemente ignorare... al termine del processo la tua collection
contiene tutte e sole le stringhe univoche.
Esempio:
Dim clCheck As Collection
dim strCheck As String
Set clCheck = New Collection
Open "c:\test.dat" For Output As #1
Line Input #1, strCheck
'qui aggiungiamo una lettera costante alla stringa, per ovviare ad un
'problema della collection con chiavi strettamente numeriche,
'dove in fase di lettura possono essere confusi accesso per indice e per
chiave.
On Error Resume Next
clCheck.Add strCheck, "k" & strCheck
On Error Goto 0
Close #1
Ciao
--
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

 file in modo sequenziale mi dice quanti tipi di stringhe diverse incontro
I suggerimenti degli altri sono tutti corretti, ma forse troppo complicati
per quello che ti serve.
In casi semplici come il tuo (e se il numero di elementi diversi
da cercare non è troppo elevato) il sistema più veloce in tutti i
sensi è quello di andare caricando le stringhe in un'unica variabile
(inserendo fra di esse un opportuno separatore univoco)
e controllare via via che non ci siano doppioni semplicemente
eseguendo una unica istruzione INSTR:
n = 0
S = ""
Open "MioFile.Txt" For Input As 1
Do Until Eof(1)
    Line Input #1, X
'   il doppio segno di paragrafo serve per evitare
'   strane combinazioni di stringhe che potrebbero
'   dare risultati errati; ad esempio, se la print stringa
'   è "pippo" e la seconda è "lotar", il concatenamento
'   di stringhe sarebbe "pippolotar", ma se poi leggo la
'   stringa "polo", viene trovata, ma è errata.
    If Instr(S, X & "§§") = 0 Then
        S = S & X & "§§"
        n = n + 1
    End If
Loop
Close 1
Print "Stringhe diverse trovate: "; n
End
--
Er Roscio.