Delphi: создайте дерево файлов в TreeView в зависимости от их имен - PullRequest
1 голос
/ 28 декабря 2011

У меня есть строковый список файлов и дата в качестве их имен (разделители могут быть разными: "- |."; Маска: 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

Большое спасибо за помощь !!!

Ответы [ 2 ]

3 голосов
/ 29 декабря 2011

Поскольку у вас уже есть заполненный 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 голосов
/ 28 декабря 2011
  • Создать массив из 12 строковых списков, по одному в месяц.
  • Перебирайте файлы, добавляя каждое имя файла в соответствующий месяц.
  • После обработки всех файлов отсортируйте каждый отдельный список строк с соответствующим порядком сортировки.
  • Наконец, заполните представление дерева. Для каждого списка строк добавьте узел верхнего уровня, а затем добавьте все дочерние элементы, просматривая список строк.

Я предполагаю, что вы уже знаете, как анализировать отдельные строки, как реализовать пользовательский порядок сортировки и как заполнять список строк, и что ваша проблема заключается в том, как решить проблему с высокого уровня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...