Gambas-it

Gambas3 => Programmazione => Topic aperto da: dex - 20 Giugno 2019, 00:59:04

Titolo: [Risolto] Ricerca in array
Inserito da: dex - 20 Giugno 2019, 00:59:04
Caio Raga
sono sempre qui a sbattere la testa
Ho abbandonato le collection in quanto variant potevano darmi problemi

Ora riempio un array con i dati dei clienti. tipo: cognome, nome, codice fiscale ecc...

esiste un modo veloce per trovare i dati? tipo ho un dato unico "codice fiscale", se voglio il nome di quel codice fiscale posso usare il C.F. come chiave? oppure devo scorrere tutto l'array trovare l'index di quel codice fiscale e poi estrarre il nome?
Titolo: Re:Ricerca in array
Inserito da: Gianluigi - 20 Giugno 2019, 11:51:34
Questo potrebbe aiutare?:
Codice: [Seleziona]
' Gambas module file

Public sUtenti As String[]

Public Sub Main()

  Dim a, b, r As Integer

  a = 3
  b = 4
  sUtenti = New String[a, b]
  sUtenti[0, 0] = "Mario"
  sUtenti[0, 1] = "Rossi"
  sUtenti[0, 2] = "1234567890"
  sUtenti[0, 3] = "Idraulico"
  sUtenti[1, 0] = "Franco"
  sUtenti[1, 1] = "Verdi"
  sUtenti[1, 2] = "3456789012"
  sUtenti[1, 3] = "Carpentiere"
  sUtenti[2, 0] = "Maria"
  sUtenti[2, 1] = "Bianchi"
  sUtenti[2, 2] = "7890123456"
  sUtenti[2, 3] = "Falegname"
  r = sUtenti.Find("3456789012")
  r = r \ b
  Print "Nome utente = "; sUtenti[r, 0]
  Print "Cognome utente = "; sUtenti[r, 1]
  Print "Codice Utente = "; sUtenti[r, 2]
  Print "Funzione Utente = "; sUtenti[r, 3]

End

Vedi questa lezione e i suoi collegamenti:
https://www.gambas-it.org/wiki/index.php?title=Accedere_linearmente_in_scrittura_ed_in_lettura_ad_una_Matrice
Titolo: Re:Ricerca in array
Inserito da: vuott - 20 Giugno 2019, 13:46:48
Io proporrei questo esempio:

Codice: [Seleziona]
Public Sub Main()

  Dim sUtenti As String[] = ["Mario", "Rossi", "1234567890", "Idraulico", "Franco", "Verdi", "3456789012", "Carpentiere",
                             "Maria", "Bianchi", "7890123456", "Falegname"]
  Dim i As Integer
                             
  i = sUtenti.Find("3456789012")
 
  If i Mod 2 = 0 Then Print "Il codice fiscale "; sUtenti[i]; " appartiene a: \e[31m"; sUtenti[i - 2]; " "; sUtenti[i - 1]; "\e[0m - \e[34m"; sUtenti[i + 1]

End
Titolo: Re:Ricerca in array
Inserito da: Gianluigi - 20 Giugno 2019, 14:02:14
Ciao vuott.
guarda che così come è ora non funziona se usi find con gli altri valori, ad esempio con Mario dà errore oppure restituisce dati sbagliati o non restituisce nulla.  :-\
Il mio esempio funziona (o almeno dovrebbe  :) )su qualunque colonna.
Titolo: Re:Ricerca in array
Inserito da: vuott - 20 Giugno 2019, 14:33:18
non funziona se usi find con gli altri valori

Capisco, ma io mi sono strettamente attenuto alla impostazione/domanda di Dex: "usare il C.F. come chiave".
Titolo: Re:Ricerca in array
Inserito da: dex - 20 Giugno 2019, 18:05:39
Ciao
con find funziona

metto risolto
Titolo: Re:[Risolto] Ricerca in array
Inserito da: vuott - 20 Giugno 2019, 19:05:40
...ma quale soluzione delle due hai adottato ?
Titolo: Re:[Risolto] Ricerca in array
Inserito da: dex - 21 Giugno 2019, 23:53:11
Quella di Gianluigi

Ps. ma non dirglielo se no si monta la testa  ;D
Titolo: Re:[Risolto] Ricerca in array
Inserito da: dex - 28 Giugno 2019, 01:53:16
Ciao raga
riapro il post in quanto si è presentato un problema

con
Codice: [Seleziona]
r = sUtenti.Find("3456789012")
  r = r \ b
funziona se trova la stringa, il problema è che se non la trova mi ritorna 0
purtroppo 0 è il primo index della  matrice e invece di darmi errore mi riposta i dati del primo indice

si può fare in modo che debba restituire un errore?
Titolo: Re:[Risolto] Ricerca in array
Inserito da: Gianluigi - 28 Giugno 2019, 09:50:07
Codice: [Seleziona]
  If r = -1 Then
    Print "NESSUN RISCONTRO"
    Return   
  Endif

Ti bastava dare un F2 su Find  :P
Titolo: Re:[Risolto] Ricerca in array
Inserito da: vuott - 28 Giugno 2019, 15:33:18
funziona se trova la stringa, il problema è che se non la trova mi ritorna 0


..ma in vero ritorna -1, non zero.  :-X
Titolo: Re:[Risolto] Ricerca in array
Inserito da: Gianluigi - 28 Giugno 2019, 15:49:36
funziona se trova la stringa, il problema è che se non la trova mi ritorna 0


..ma in vero ritorna -1, non zero.  :-X

Credo che lui si riferisse a:
r = r \ b che è come dire -1 \ 4 che restituisce appunto 0
Naturalmente il controllo andava fatto prima...
Titolo: Re:[Risolto] Ricerca in array
Inserito da: vuott - 28 Giugno 2019, 16:22:39
Naturalmente il controllo andava fatto prima...

Infatti.
Titolo: Re:[Risolto] Ricerca in array
Inserito da: dex - 28 Giugno 2019, 21:56:13
Gia
per accorciare ottenevo 0
Codice: [Seleziona]
Credo che lui si riferisse a:
r = r \ b che è come dire -1 \ 4 che restituisce appunto 0
Naturalmente il controllo andava fatto prima...

mea culpa
grazie raga