Автор: Zloy_Gelud
Дата сообщения: 09.08.2008 18:21
40rt [Код немного поправлен]
Могу предложить [more=такое]
Код: SB_DATE = 1;
SB_NUMBER = 2;
SB_NAME1 = 3;
SB_NAME2 = 4;
-- заполнение Листбокса
function FillLB(sPath, cSortType)
ListBox.DeleteItem("ListBox1", -1);
local tData = TextFile.ReadToTable(sPath);
-- функция выравнивания чисел по длине для правильной сортировки
local function Leveling(sStr1, sStr2)
local nLen1 = String.Length(sStr1)-2;
local nLen2 = String.Length(sStr2)-2;
if (nLen1 > nLen2) then
sStr2 = String.Repeat("0", nLen1 - nLen2)..String.Mid(sStr2, 2, String.Length(sStr2) - 1);
elseif (nLen1 < nLen2) then
sStr1 = String.Repeat("0", nLen2 - nLen1)..String.Mid(sStr1, 2, String.Length(sStr1) - 1);
end
return sStr1, sStr2;
end
-- функция сортировки
local function Sorter(v1,v2)
local tStr1 = WinApi.DelimitedStringToTable(v1, " ");
local tStr2 = WinApi.DelimitedStringToTable(v2, " ");
if (cSortType == 1) then
sStr1, sStr2 = Leveling(tStr1[1], tStr2[1]);
elseif (cSortType == 2) then
sStr1, sStr2 = Leveling(tStr1[2], tStr2[2]);
elseif (cSortType == 3) then
sStr1 = String.Mid(tStr1[3], 2, String.Length(tStr1[3]) - 1);
sStr2 = String.Mid(tStr2[3], 2, String.Length(tStr2[3]) - 1);
elseif (cSortType == 4) then
sStr1 = String.Mid(tStr1[4], 2, String.Length(tStr1[4]) - 1);
sStr2 = String.Mid(tStr2[4], 2, String.Length(tStr2[4]) - 1);
end
if (sStr1 < sStr2) then
return true; else return false;
end
end
Table.Sort(tData, Sorter);
for n, sItem in tData do
ListBox.AddItem("ListBox1", sItem, "");
end
end