Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [vb6]listbox E Contatori

    ciao ragazzi
    ho un problema che vi spiego come meglio posso

    ho una list box riempiata da moltitudine di righe ogni riga è composta cosi

    data.n1.n2.n3.n4.n5
    esempio
    25/10/2010.20.21.22.23.24
    ovviamente i numeri cambiano da riga in riga

    io devo trovare selezionarein tutte le righe la frequenza degli ambi
    ogni riga restituisce 10 ambi

    cioè

    codice:
    For i = 0 To List1.ListCount - 1
    
      numeri = List1.List(i)
      
       Matrice = Split(numeri, ".", -1, vbTextCompare)
       
        For n1 = 1 To UBound(Matrice) - 1
         For n2 = n1 + 1 To UBound(Matrice)
                      
                 nn1 = Matrice(n1)
                  nn2 = Matrice(n2)

    in questo modo ottengo tutti gli ambi
    e fin qui funziona tutto bene

    adesso devo trovare tutti gli ambi ripetuti quindi la loro frequenza


    dichiaro

    codice:
    max1 = 0
    max2 = 0
    maxvolte = 0
    e poi


    codice:
                  ambi(nn1, nn2) = ambi(nn1, nn2) + 1
                    maxvolte = ambi(nn1, nn2)
                     DoEvents
                    strSortite = ""
              For Y = 1 To maxvolte
            strSortite = strSortite
              Next
     List5.AddItem maxvolte & " Sortite del  " & CStr(nn1) & "  " & CStr(nn2)


    totale codice elaborato

    codice:
    Dim Matrice() As String
    Dim ambi(90, 90) As Long
    max1 = 0
    max2 = 0
    maxvolte = 0
    
    For i = 0 To List1.ListCount - 1
      numeri = List1.List(i)
       Matrice = Split(numeri, ".", -1, vbTextCompare)
        For n1 = 1 To UBound(Matrice) - 1
         For n2 = n1 + 1 To UBound(Matrice)
      '   List5.AddItem Matrice(n1) & " " & Matrice(n2)
          
        
       
              max1 = n1
                max2 = n2
                maxvolte = 0
                 nn1 = Matrice(n1)
                  nn2 = Matrice(n2)
                  If nn1 <> 0 And nn2 <> 0 Then
                  ambi(nn1, nn2) = ambi(nn1, nn2) + 1
                    maxvolte = ambi(nn1, nn2)
                     DoEvents
                    strSortite = ""
              For Y = 1 To maxvolte
            strSortite = strSortite
              Next
     List5.AddItem maxvolte & " Sortite del  " & CStr(nn1) & "  " & CStr(nn2)
       End If
     Next n2
        Next n1
     Next i


    il problema e che li conteggia

    ma nella lista5( raccoglitore delle frequenze) mi mette si le frequenze
    ma in modo ripetuto


    cioè se troeva un ambo frequente 7 volte

    nella lista lo scrive sette volte

    lo mette fra gli ambi che hanno frequenza 1
    lo mette negli ambi che hanno frequenza 2
    lo mette negli ambi che hanno frequenza 3
    ect ect ect

    lo stesso per tutti gli altri

    come posso fare?

    grazie anticipatamente.
    i miei post sono RIFERITI TUTTI A VISUAL BASIC 6
    MSN MESSENGER : magicolotto@hotmail.it

  2. #2
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Prima di aggiungere la stringa a List5 devi controllare che non sia già presente.

    Per cui, secondo me, la riga:
    List5.AddItem Matrice(n1) & " " & Matrice(n2)
    dovrebbe essere sostituita da una chiamata ad sub-routine che prima di aggiungere l'elemento esegue tale verifica.

    La routine potrebbe essere più o meno così:

    codice:
    Private Sub AggiungiElemento(ByVal sElemento As String)
        Dim i As Long
        Dim bGiaPresente As Boolean
        For i = 0 To List5.ListCount - 1
           If List5.List(i) = sElemento Then
               bGiaPresente = True
               Exit For
           End If
        Next i
        If Not bGiaPresente Then
            List5.Add sElemento
        End If
    End Sub
    e la usi così:
    AggiungiElemento Matrice(n1) & " " & Matrice(n2)

    Controlla bene perchè l'ho scritto al volo!


  3. #3
    grazie deella risposta

    ma questa riga
    List5.AddItem Matrice(n1) & " " & Matrice(n2)

    non è compresa nel codice, scusa se l'ho messa

    ma se fai caso cè l'apice

    col codice che ho scritto io
    nella list5
    mi vengono restituiti la frequenza degli ambi
    della list1

    la list1 viene riempita come sopra ho descritto


    se ho capito bene
    il tuo codice mette nella lista solo quelli gia presenti

    ma non credo che vada bene, ti faro sapere

    magare devo metterlo alla fine, facendo una modifica

    e facendo un ricontrollo alla fine, ma mi sempra eccessivo un'altro controllo
    i miei post sono RIFERITI TUTTI A VISUAL BASIC 6
    MSN MESSENGER : magicolotto@hotmail.it

  4. #4
    Originariamente inviato da Magicolotto
    non credo che vada bene
    Prima prova il codice; sintatticamente e logicamente è corretto, per cui sta a te adattarlo nella routine che ritieni opportuno.


    Ciao

  5. #5
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da Magicolotto
    grazie deella risposta

    ma questa riga
    List5.AddItem Matrice(n1) & " " & Matrice(n2)

    non è compresa nel codice, scusa se l'ho messa
    ma se fai caso cè l'apice
    Scusa, non c'avevo fatto caso (di norma non si deve includere il codice commentato, dato che può solo generare confusione, come in questo caso...)

    Solo ora ho visto che aggiungi l'elemento più sotto
    Certo è che l'identazione che hai usato non è molto leggibile.


    Allora la riga da sostituire sarà probabilmente questa:
    List5.AddItem maxvolte & " Sortite del " & CStr(nn1) & " " & CStr(nn2)

    Originariamente inviato da Magicolotto
    ma mi sempra eccessivo un'altro controllo
    Allora tu come faresti?


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.