Autore Topic: [Risolto] Ricerca in array  (Letto 1152 volte)

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
[Risolto] Ricerca in array
« il: 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?
« Ultima modifica: 20 Giugno 2019, 18:06:07 da dex »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.161
  • Tonno verde
    • Mostra profilo
Re:Ricerca in array
« Risposta #1 il: 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
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.373
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Ricerca in array
« Risposta #2 il: 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
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.161
  • Tonno verde
    • Mostra profilo
Re:Ricerca in array
« Risposta #3 il: 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.
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.373
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Ricerca in array
« Risposta #4 il: 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".
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re:Ricerca in array
« Risposta #5 il: 20 Giugno 2019, 18:05:39 »
Ciao
con find funziona

metto risolto

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.373
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:[Risolto] Ricerca in array
« Risposta #6 il: 20 Giugno 2019, 19:05:40 »
...ma quale soluzione delle due hai adottato ?
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re:[Risolto] Ricerca in array
« Risposta #7 il: 21 Giugno 2019, 23:53:11 »
Quella di Gianluigi

Ps. ma non dirglielo se no si monta la testa  ;D

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re:[Risolto] Ricerca in array
« Risposta #8 il: 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?

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.161
  • Tonno verde
    • Mostra profilo
Re:[Risolto] Ricerca in array
« Risposta #9 il: 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
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.373
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:[Risolto] Ricerca in array
« Risposta #10 il: 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
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.161
  • Tonno verde
    • Mostra profilo
Re:[Risolto] Ricerca in array
« Risposta #11 il: 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...
« Ultima modifica: 28 Giugno 2019, 15:50:28 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.373
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:[Risolto] Ricerca in array
« Risposta #12 il: 28 Giugno 2019, 16:22:39 »
Naturalmente il controllo andava fatto prima...

Infatti.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re:[Risolto] Ricerca in array
« Risposta #13 il: 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