Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: Proste pytanie o sortowanie tablic...
Viper87



Typ: neutral
Postów: 490
Zarejestrowany: Oct 2002
Proste pytanie o sortowanie tablic...

Witam!

Potrzebuje zwrocic wynik funkcji Dir do tablicy i posortować alafabetycznie. Czy ktoś wie jak to zrobić? Oto kod:

For a = 1 To 100
Combo1.AddItem (jezyk)
jezyk = Dir
If jezyk = "" Then Exit For
Next a

Z góry dziękuję


_____________________________________________
Viper

"Savoir c`est prevoir, prevoir c`est prevenir". 
(Wiedzieć to przewidzieć, przewidzieć to zapobiegać) 


19-03-2004 11:19
Pokaż profil Viper87  Wyślij email do Viper87   Odwiedź stronę Viper87  
anonim




Typ: Nie zarejestrowany

Użyj ListBoxa

19-03-2004 17:36
  
Viper87



Typ: neutral
Postów: 490
Zarejestrowany: Oct 2002

Problem w tym, że chcę użyć Combo Boxa...


_____________________________________________
Viper

"Savoir c`est prevoir, prevoir c`est prevenir". 
(Wiedzieć to przewidzieć, przewidzieć to zapobiegać) 


19-03-2004 19:00
Pokaż profil Viper87  Wyślij email do Viper87   Odwiedź stronę Viper87  
losmac
"profesorek"




Typ: neutral
Postów: 758
Zarejestrowany: May 2003
A StrComp() to nie łaska?

Chyba zapomniałeś o prostej funkcji StrComp(), która porównuje 2 ciągi i zwraca wynik od -1 do 1 w zależności  od porównania.

Poniżej zamieszczam procedurkę, która pobiera adres tablicy z nieposortowanymi danymi, dokonuje na niej zmian i zwraca posortowaną tablicę.

Sub Sortuj(ByRef Nazwy() As String)
Dim i As Long, j As Long, k As Long
Dim suma As Long
Dim strtmp As String

k = UBound(Nazwy()) 'ustal wielkość tablicy
For i = LBound(Nazwy()) To k
    For j = i + 1 To k
        suma = StrComp(UCase(Nazwy(i)), UCase(Nazwy(j)), vbBinaryCompare) 'porównaj ciągi znaków przekazanych wielkimi literami, by uprościć proces
        If suma = 1 Then 'jeśli string 1 jest większy
            strtmp = Nazwy(i) 'pobierz go do pamięci
            Nazwy(i) = Nazwy(j) 'podstaw mniejszy na miejsce większego
            Nazwy(j) = strtmp 'następnie większy wstaw na miejsce mniejszego
        End If
    Next j
Next i

End Sub


Nie jest to może idealne rozwiązanie, ale powinno wystarczyć! Jak widzisz, zastosowałem tu algorytm sortowania przez podstawianie, bazujący na porównaniu 2 ciągów, przekazanych dla celów porównania wielkimi literami.

Wywołanie funkcji może być, np. takie:

Sub NANANA()
'tutaj pobierasz pliki i katalogi do swojej tablicy ładowanej dynamicznie
'...
'sortujesz
Sort TwojaTablica
'tutaj wyświetlasz wynik, ładując to do kombo
Combo1.List() = TwojaTablica() 'już posortowane
End Sub


[Post edytowany dnia 21-03-2004 13:29 przez losmac]


_____________________________________________
POSTULATY STARUSZKA:
1) Ludzie, dbajcie o polszczyznę!!!
2) Ludzie, zadawajcie kompletne pytania, a nie rzucacie ochłapy i trzeba się domyślać o co chodzi!!!

Powodzenia
Maciej Łoś

21-03-2004 13:28
Pokaż profil losmac  Wyślij email do losmac   Odwiedź stronę losmac  
losmac
"profesorek"




Typ: neutral
Postów: 758
Zarejestrowany: May 2003
I jeszcze jedno

Czemu używasz for'a do wyłuskania plików? Chyba, że możesz ich załadować nie więcej jak sto.

Moje rozwiązanie - nie sprawdzałem!

'pierwsze wywołanie Dir'a
strTmp = Dir("C:\"
'pętelka
Do While strTmp <> ""
    Redim Preserve MojePliki(i)
    MojePliki(i) = strTmp
    i = i+1
    strTmp = Dir
Loop



_____________________________________________
POSTULATY STARUSZKA:
1) Ludzie, dbajcie o polszczyznę!!!
2) Ludzie, zadawajcie kompletne pytania, a nie rzucacie ochłapy i trzeba się domyślać o co chodzi!!!

Powodzenia
Maciej Łoś

21-03-2004 13:35
Pokaż profil losmac  Wyślij email do losmac   Odwiedź stronę losmac  
Wszystkich odpowiedzi: 4 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1