Gambas-it

Archivi (sola lettura) => Programmazione (Gambas 2) => Topic aperto da: dex - 29 Agosto 2010, 22:16:32

Titolo: [risolto]contare clienti
Inserito da: dex - 29 Agosto 2010, 22:16:32
hello raga

mi sono incartato su un array e mi serve una mano.
in pratica in un array carico i codici dei clienti e mi serve sapere quanti clienti diversi ci sono esempio:

cod 1f
cod 1f
cod 3c
cod 3c
cod 5d

il risultato dovrebbe essere 3 in quanto 1f e 3c sono ripetuti 2 volte

ho cominciato con il seguente codice  ma ora non so come completarlo
Codice: [Seleziona]
DIM Cl AS NEW String[]
  FOR i, p, t AS Integer
  
    t = TableView1.Rows.Count
 
  FOR i = 1 TO t
      cl.add(TableView1[i - 1, 0].text)    
  NEXT  
  
  FOR i = 1 TO cl.Count
    
     p = ?
    
  NEXT

la p è la variabile che deve contenere il risultato (nel mio esempio 3)
Titolo: Re: contare clienti
Inserito da: Ceskho - 29 Agosto 2010, 22:31:57
L'ho scritto di getto..vedi se almeno l'idea ti stuzzica...

Codice: gambas [Seleziona]
  DIM Cl AS NEW String[]
  DIM i, j, p AS Integer
  DIM esiste AS Boolean

  FOR i = 0 TO TableView1.Rows.Count - 1
      cl.add(TableView1[i , 0].text)     
  NEXT 

  p = 0

  FOR i = 0 TO cl.Count - 1
      Esiste = FALSE
      FOR j = 0 TO c1.Count - 1
         IF c[i] = c[j] THEN esiste = TRUE
      NEXT
      IF Not Esiste THEN INC p
  NEXT
Titolo: Re: contare clienti
Inserito da: dex - 29 Agosto 2010, 22:48:44
@ceskho

mi da il totale dei record inseriti e non dei clienti

nel mio caso mi esce 6 invece di 3

Edit mi correggo (avevo sbagliato a posizionare il codice)

mi da sempre 0
Titolo: Re: contare clienti
Inserito da: Ceskho - 29 Agosto 2010, 22:52:57
@ceskho

mi da il totale dei record inseriti e non dei clienti

nel mio caso mi esce 6 invece di 3

E se cambi la riga 16 in:

 IF Esiste = FALSE THEN INC p

?
Titolo: Re: contare clienti
Inserito da: giulio - 29 Agosto 2010, 23:37:24
Detto come al solito che ci sono mille modi per risolvere lo stesso problema, un modo è questo:

Codice: [Seleziona]

DIM arsLista AS NEW String[]
DIM arsUnique AS NEW String[]
DIM sCodice AS String
  
arsLista = Split("cod 1 f,cod 1 f,cod 3 c,cod 3 c,cod 5 d")  
  
FOR EACH sCodice IN arsLista
   IF NOT arsUnique.Exist(sCodice) THEN arsUnique.Add(sCodice)
NEXT
  
PRINT arsUnique.Count


In pratica crei un array temporaneo arsUnique eliminando i doppioni che ci sono nel primo array arsLista (il tuo Cl) e ne conti gli elementi. Bada che "codicepippo" è diverso da "codicepippo ".
Titolo: Re: contare clienti
Inserito da: giulio - 29 Agosto 2010, 23:47:21
Codice: [Seleziona]
DIM Cl AS NEW String[]
  DIM ClTmp AS NEW String[]
  DIM i, p, t AS Integer
   
  t = TableView1.Rows.Count
 
  FOR i = 1 TO t
   
    cl.add(TableView1[i - 1, 0].text)     
    IF NOT ClTmp.Exist(TableView1[i - 1, 0].text) THEN ClTmp.Add(TableView1[i - 1, 0].text)
       
  NEXT 
 
  p = ClTmp.Count
Titolo: Re: contare clienti
Inserito da: dex - 29 Agosto 2010, 23:59:02
risolto con il doppio array