Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it L'avatar di evil80
    Registrato dal
    May 2001
    Messaggi
    321

    [vb] metodo + veloce per eliminare duplicati

    Ciao,
    dovrei velocizzare un programma in vb che apre un file di testo contenente numeri o parole ed elimina i duplicati,poi salva il file con le modifiche.
    Qual'è secondo voi il metodo più veloce ?

    Sto parlando di qualcosa tipo 20.000 righe di file (o anche molte di più)...
    Grazie.
    Secondo alcuni autorevoli testi di tecnica di aeronautica, il calabrone non può volare, a causa della forma e del peso del proprio corpo in rapporto alla superficie alare.
    Ma il calabrone non lo sa e perciò continua a volare.
    Igor Sikorsky

  2. #2
    Caricarlo tutto in memoria e elaborarlo in un colpo solo.

  3. #3
    Utente di HTML.it L'avatar di evil80
    Registrato dal
    May 2001
    Messaggi
    321
    sto usando queso codice ma è lentissimo....
    mi sapresti aiutare a migliorarlo ?


    codice:
    Private Sub CmdEsegui_Click()
     Dim intFile As Integer
     Dim intRitorno As Integer
     Dim strTemp() As String
     Dim strTestoOk() As String
     Dim strTempOk As String
     Dim lnC1 As Long
     Dim lnC2 As Long
     Dim lnC3 As Long
     Dim lnC4 As Long
     Dim lnTrovato As Long
      
    
     'Assegna un numero valido per il file
     intFile = FreeFile
     
     'Apre il file
     Open selected For Input As #intFile
     
     'Legge l'intero contenuto del file e lo pone all'interno di un array riga per riga
     lnC1 = 0
     Do Until (EOF(intFile))
         ReDim Preserve strTemp(lnC1)
         Line Input #intFile, strTemp(lnC1)
         lnC1 = lnC1 + 1
     Loop
     
     'Chiude il file
     Close #intFile
     
     lnC4 = 0
     
     For lnC2 = LBound(strTemp) To UBound(strTemp)
       
       lnTrovato = 0
       
           For lnC3 = LBound(strTemp) To UBound(strTemp)
                  
              If strTemp(lnC2) = strTemp(lnC3) Then
               lnTrovato = lnTrovato + 1
              End If
              
           Next
             
             If lnTrovato = 0 Then
              strTempOk = strTempOk & strTemp(lnC2) & " "
              lnC4 = lnC4 + 1
             End If
     
     Next
     
     ReDim strTestoOk(lnC4)
     strTestoOk = Split(strTempOk, " ")
     
     intFile = FreeFile
     Open selected For Output As #intFile
     
     For lnC4 = LBound(strTestoOk) To UBound(strTestoOk)
           Put #intFile, , strTestoOk(lnC4)
     Next
     
     Close #intFile
       
    intRitorno = MsgBox("Ho finito")
    End Sub
    Secondo alcuni autorevoli testi di tecnica di aeronautica, il calabrone non può volare, a causa della forma e del peso del proprio corpo in rapporto alla superficie alare.
    Ma il calabrone non lo sa e perciò continua a volare.
    Igor Sikorsky

  4. #4
    Usa l'oggetto Dictionary per immagazzinare le stringhe, dopo che avrai finito di immagazzinarle avrà già automaticamente eliminato i doppi.

  5. #5
    Utente di HTML.it L'avatar di evil80
    Registrato dal
    May 2001
    Messaggi
    321
    scusa ma mi spiegheresti meglio cos'è,come si usa (propritetà,metodi ed eventi)
    Secondo alcuni autorevoli testi di tecnica di aeronautica, il calabrone non può volare, a causa della forma e del peso del proprio corpo in rapporto alla superficie alare.
    Ma il calabrone non lo sa e perciò continua a volare.
    Igor Sikorsky

  6. #6
    Utente di HTML.it L'avatar di evil80
    Registrato dal
    May 2001
    Messaggi
    321
    scusa ma di impostazioni predefinite carico dei dati nell'oggetto dictionary e se questi sono uguali lui li esclude ???
    Secondo alcuni autorevoli testi di tecnica di aeronautica, il calabrone non può volare, a causa della forma e del peso del proprio corpo in rapporto alla superficie alare.
    Ma il calabrone non lo sa e perciò continua a volare.
    Igor Sikorsky

  7. #7
    Utente di HTML.it L'avatar di evil80
    Registrato dal
    May 2001
    Messaggi
    321
    Originariamente inviato da Andrea Simonassi
    Usa l'oggetto Dictionary per immagazzinare le stringhe, dopo che avrai finito di immagazzinarle avrà già automaticamente eliminato i doppi.
    mi spieghi come posso eliminare automaticamente i doppioni ?
    Secondo alcuni autorevoli testi di tecnica di aeronautica, il calabrone non può volare, a causa della forma e del peso del proprio corpo in rapporto alla superficie alare.
    Ma il calabrone non lo sa e perciò continua a volare.
    Igor Sikorsky

  8. #8
    Utente di HTML.it L'avatar di evil80
    Registrato dal
    May 2001
    Messaggi
    321
    questo è il codice che ho scitto ma è troooopppo lento !!!!

    codice:
    Option Explicit
    Dim selected As String
    
    Private Sub CmdEsegui_Click()
    
    'On Error Resume Next
    
    Dim intFile As Integer
    Dim ListaFile
    Dim strTemp As String
    Dim Contenuto
    Dim lnC1 As Long
    Dim lnc2 As Long
    Dim intRitorno As Integer
    
    
    Set ListaFile = CreateObject("Scripting.Dictionary")
    
     'Assegna un numero valido per il file
     intFile = FreeFile
     
     'Apre il file
     Open selected For Input As #intFile
     
     'Legge l'intero contenuto del file e lo pone all'interno di un array riga per riga
     lnC1 = 1
     Do Until (EOF(intFile))
         
         Line Input #intFile, strTemp
         ListaFile.Add lnC1, strTemp
         lnC1 = lnC1 + 1
         
     Loop
     
     'Chiude il file
     Close #intFile
     
     
    ProgressBar1.Min = 0
    ProgressBar1.Max = ListaFile.Count
    ProgressBar1.Value = 0
     
    For lnC1 = 1 To ListaFile.Count - 1
     For lnc2 = 1 To ListaFile.Count - 1
       If (ListaFile.Item(lnC1) = ListaFile.Item(lnc2)) And (lnC1 <> lnc2) Then
          ListaFile.Remove (lnc2)
       End If
     Next
     If ProgressBar1.Value < ProgressBar1.Max Then
       ProgressBar1.Value = ProgressBar1.Value + 1
     End If
    Next
     
    intFile = FreeFile
    Open selected For Output As #intFile
    
    For lnC1 = 1 To ListaFile.Count - 1
       Write #intFile, ListaFile.Item(lnC1)
    Next
    
    Close #intFile
       
    intRitorno = MsgBox("Ho finito")
    End Sub
    
    Private Sub open_Click()
     CommonDialogFile.ShowOpen
     selected = CommonDialogFile.FileName
    End Sub
    Ti prego aiutami....

    ciao
    Secondo alcuni autorevoli testi di tecnica di aeronautica, il calabrone non può volare, a causa della forma e del peso del proprio corpo in rapporto alla superficie alare.
    Ma il calabrone non lo sa e perciò continua a volare.
    Igor Sikorsky

  9. #9
    L'input consiste in linee di testo e basta?

  10. #10
    Utilizzando un'albero binario non bilanciato (se ti metti anche a bilanciarlo rallenta troppo) ho elaborato un file da 11 MB (70000 righe) in 7 secondi su un celeron a 300 MHZ, usando solo l'interprete senza compilare, credo sia difficile fare di piu, se vuoi far di meglio usa il C.

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.