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

    per la comunità: funzione ordinamento array alfa numerico

    la seguente funzione serve per ordinare, in maniera crescente o descrescente, un array di dati alfa-numerici.
    esempio di chiamata:
    codice:
        
        mioArray = ordinaArrayAlfaNumerico(mioArray, "desc")
    funzione:
    codice:
    Function ordinaArrayAlfaNumerico(arrayDaOrdinare, tipoOrdinamento)
    	
    	ReDim arrayOrdinato(UBound(arrayDaOrdinare))
    	stringaCaratteri = "0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,r,t,u,v,w,x,y,z"
    	ArrayCaratteri = split(stringaCaratteri,",")
    	
    	If LCase(tipoOrdinamento)="desc" Then
    		ordinamentoArray = 1
    	Else
    		ordinamentoArray = 0
    	End If
    	
    	For i = LBound(arrayDaOrdinare) to UBound(arrayDaOrdinare)
    		
    		puntatore = (UBound(arrayDaOrdinare)+1)
    		valoreDaControllare = arrayDaOrdinare(i)
    
    		For z = LBound(arrayDaOrdinare) to UBound(arrayDaOrdinare)
    		
    			sommaPosizioniB = ""
    			sommaPosizioniA = ""
    			For countCaratteri = 1 to Len(valoreDaControllare)
    				For countArrayCaratteri= LBound(ArrayCaratteri) to UBound(ArrayCaratteri)
    					If ArrayCaratteri(countArrayCaratteri) = LCase(Mid(valoreDaControllare,countCaratteri,1)) Then
    						sommaPosizioniA = sommaPosizioniA & countArrayCaratteri
    					End If
    					If ArrayCaratteri(countArrayCaratteri) = LCase(Mid(arrayDaOrdinare(z),countCaratteri,1)) Then
    						sommaPosizioniB = sommaPosizioniB & countArrayCaratteri
    					End If
    				Next
    			Next
    			
    			If sommaPosizioniA = "" Then sommaPosizioniA = 1 Else sommaPosizioniA = sommaPosizioniA
    			If sommaPosizioniB = "" Then sommaPosizioniB = 1 Else sommaPosizioniB = sommaPosizioniB
    			
    			Select Case ordinamentoArray
    				Case 0
    					If sommaPosizioniA<=sommaPosizioniB Then
    						puntatore=puntatore - 1
    					End If
    				Case 1
    					If sommaPosizioniA>=sommaPosizioniB Then
    						puntatore=puntatore - 1
    					End If
    			End Select
    			
    		Next
    		
    		
    		If arrayOrdinato(puntatore)="" Then
    			arrayOrdinato(puntatore) = valoreDaControllare
    		Else
    			controlUguali = 0
    			For p = LBound(arrayOrdinato) to UBound(arrayOrdinato)
    				If LCase(arrayOrdinato(p)) = LCase(valoreDaControllare) Then
    					controlUguali = controlUguali +1		
    				End If
    			Next
    			arrayOrdinato(puntatore+controlUguali) = valoreDaControllare
    		End If
    	Next
    	
    	ordinaArrayAlfaNumerico = arrayOrdinato
    	
    End Function
    se non è bello ciò che è bello figuriamoci ciò che è brutto!!



    fai anche tu come me: indenta il codice!!!!

  2. #2
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    Ciao vaargard,

    comemai controlli carattere per carattere? :master:
    se fai stringa1>stringa2 non fai prima?
    codice:
    Function OrdinaArray(arrayDaOrdinare,tipoOrdinamento)
    	ReDim arr(UBound(arrayDaOrdinare))
    	continua=true
    	do while continua
    		continua=false
    		for i=LBound(arr) to UBound(arr)-1
    			if UCase(tipoOrdinamento)="desc" then
    				if arr(i)>arr(i+1) then
    					continua=true
    					temp = arr(i)
    					arr(i)=arr(i+1)
    					arr(i+1)=temp
    				end if
    			else
    				if arr(i)<arr(i+1) then
    					continua=true
    					temp = arr(i)
    					arr(i)=arr(i+1)
    					arr(i+1)=temp
    				end if
    			end if
    		next
    	loop
    End Function

  3. #3
    ma la tua la hai provata?
    sai che viene tutto l'array vuoto si? ...

    :-)
    se non è bello ciò che è bello figuriamoci ciò che è brutto!!



    fai anche tu come me: indenta il codice!!!!

  4. #4
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    Originariamente inviato da vaargard
    ma la tua la hai provata?
    sai che viene tutto l'array vuoto si? ...

    :-)
    come si dice in questi casi? figura di m...
    heheh effettivamente l'ho fatta al volo e non l'ho provata
    codice:
    Function OrdinaArray(arrayDaOrdinare,tipoOrdinamento)
    	ReDim arr(UBound(arrayDaOrdinare))
    	for i=LBound(arrayDaOrdinare) to UBound(arrayDaOrdinare)
    		arr(i)=arrayDaOrdinare(i)
    	next
    	continua=true
    	do while continua
    		continua=false
    		for i=LBound(arr) to UBound(arr)-1
    			if LCase(tipoOrdinamento)="desc" then
    				if arr(i)<arr(i+1) then
    					continua=true
    					temp = arr(i)
    					arr(i)=arr(i+1)
    					arr(i+1)=temp
    				end if
    			else
    				if arr(i)>arr(i+1) then
    					continua=true
    					temp = arr(i)
    					arr(i)=arr(i+1)
    					arr(i+1)=temp
    				end if
    			end if
    		next
    	loop
    	OrdinaArray=arr
    End Function
    questa l'ho provata

  5. #5
    ehehehehhe
    figata .... non avevo la più pallida idea che il confronto tra stringhe desse risultato!!!!! gran bella cosa ... grazie mille!!!
    se non è bello ciò che è bello figuriamoci ciò che è brutto!!



    fai anche tu come me: indenta il codice!!!!

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.