2011-12-28 25 views
1

我有文件的字符串列表和一個日期作爲自己的名字(分隔符可以是不同的:「 - |。」面具:yyyy/mm/dd):德爾福:在樹視圖中創建文件的樹狀取決於他們的名字

 
2011-03-12.jpeg 
2011|10-15.doc 
2011.08-09.rar 
2011.10-15.txt 
2011-03-14.jpeg 
2011.06.23.mp3 
2011|07|01.zip 
2011-07-05.rar 

我該如何創建樹狀視圖?所有文件必須由月份和日期進行排序+分成月份截面,如:

enter image description here

大感謝您的幫助!

回答

3

既然你已經填充的TStringList,我只想排序它使用其CustomSort()方法,然後你可以通過它循環添加節點需要樹,如:

function SortFilesByMonthAndDay(List: TStringList; Index1, Index2: Integer): Integer; 
var 
    Value1, Value2: Integer; 
begin 
    Value1 := StrToInt(Copy(List[Index1], 6, 2)); 
    Value2 := StrToInt(Copy(List[Index2], 6, 2)); 
    if Value1 = Value2 then 
    begin 
    Value1 := StrToInt(Copy(List[Index1], 9, 2)); 
    Value2 := StrToInt(Copy(List[Index2], 9, 2)); 
    end; 
    Result := Value2 - Value1; 
end; 

var 
    I: Integer; 
    FileMonth, CurrentMonth: Integer; 
    CurrentMonthNode: TTreeNode; 
begin 
    CurrentMonth := 0; 
    CurrentMonthNode := nil; 
    Files.CustomSort(@SortFilesByMonthAndDay); 
    for I := 0 to Files.Count-1 do 
    begin 
    FileMonth := StrToInt(Copy(Files[I], 6, 2)); 
    if FileMonth <> CurrentMonth then 
    begin 
     CurrentMonth := FileMonth; 
     CurrentMonthNode := TreeView1.Items.Add(nil, SysUtils.LongMonthNames[CurrentMonth]); 
    end; 
    TreeView1.Items.AddChild(CurrentMonthNode, Files[I]); 
    end; 
end; 
0
  • 創建一個12個字符串列表的數組,每月一個。
  • 遍歷您的文件,將每個文件名添加到適當的月份。
  • 處理所有文件後,按照適當的排序順序對每個單獨的字符串列表進行排序。
  • 最後,填充樹視圖。對於每個字符串列表,添加一個頂級節點,然後通過迭代字符串列表來添加所有子節點。

我假設你已經知道如何解析單個字符串,如何實現自定義的排序順序,以及如何填充字符串列表,以及你的問題是如何從高層次解決問題。