V prvním článku, kde jsem popisoval jednoduché rozhraní pro download souborů z webu jsem připravil „půdu“ pro doplnění aplikace o možnost třídění zobrazených údajů podle různých kritérii. Dnes se dozvíte jak toto třídění zprovoznit.

Nekladu si v dnešním článku za cíl detailně popisovat algoritmy pro třídění dat, ale ukázat, jak snadné je takovéto třídění zabudovat do své aplikace a nepoužít k tomu žádný nástroj podporující třídění. Přiznávám, že asi mnohem jednodušší by bylo uložit údaje na nějaké databáze a z ní je pak jednoduše načíst už setříděné. Já vám chci však předložit řešení, které nebude na ničem závislé.

O třídících algoritmech toho bylo již napsáno mnoho a nemá cenu se na tomto místě o nich rozepisovat. Berme jako fakt, že algoritmy třídění fungují a ten kdo se bude chtít dozvědět více o principech jejich fungování se podívá do libovolné učebnice programování, kde se zcela jistě budou tomuto tématu podrobně věnovat.

Oproti standardním „učebnicovým příkladům“ v tomto případě třídíme vícerozměrné pole. To podle kterého rozměru pole budeme třídit je předáváno jako parametr procedury. Podle tohoto parametru si v úvodu procedury určíme který rozměr pole budeme porovnávat. Pro jednoduchost jsme použil základní verzi takzvaného „bublinkového“ třídění. Při této metodě je pole procházeno pomoc dvou cyklů a jsou porovnávány jednotlivé prvky a podle potřeby jsou mezi sebou prohazovány.

Při nalezení dvou prvků u nichž je nutná záměna pozice je nutné si uvědomit, že musíme zaměnit celý řádek pole. To můžeme provést například pomocí cyklu, kterým „projedeme“ celý řádek.

Sub TridSoubory(sort)
   intRows = uBound(FileArray, 1)
   intCols = uBound(FileArray, 2)
   dim idsort
   idsort=0
   select case sort
      case „name“:
         idsort=0
      case „type“:
         idsort=2
      case „size“:
         idsort=3
      case „dtmod“:
         idsort=4
      case „pocet“:
         idsort=5
   end select
   For i = 0 to intRows-1
      For q = 0 to intRows-1
         if (FileArray(i,idsort) < FileArray(q,idsort)) then
            for a =0 to intcols
               temp = FileArray(i,a)
               FileArray(i,a) = FileArray(q,a)
               FileArray(q,a) = temp
            next
         end if
      Next
   Next
End Sub

Mnozí čtenáři jistě namítnou, že by se celé třídění dalo provést jinak a dokonce i lépe. Ano je to tak. Určitě najdete řešení, které bude rychlejší a elegantnější než to moje. Myslím, že by byla škoda nepodělit se o své řešení s ostatními čtenáři. Proto tímto vyzívám každého, kdo vymyslí své vlastní řešení jak udělat třídění, aby ho vložil do diskuze k tomuto článku.

Dnes jsem tedy dokončil aplikaci, která vám umožní snadno a jednoduše provádět výměnu souborů určených k downloadu. Nabízí se ještě možnost doplnit skript o možnost procházet stromovou strukturou adresářů a nebo třebas omezit počet stažení souboru. Pokud budete mít o tyto doplňky zájem neváhejte se ozvat v diskuzi pod článkem.

Kompletní kód aplikace doplněný o dnešní úpravy si můžete stáhnout zde.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět