0

好的,我有以下问题:

我喜欢在一个特殊文件夹中获取我的 FTP 服务器上所有 .txt 文件的列表。我已经解决了这个问题。

 if IdFTP1.DirectoryListing.Count>0 then
          for i := 2 to IdFTP1.DirectoryListing.Count - 1 do
              with ListViewMain.Items.Add do
                Caption:=idftp1.DirectoryListing.Items[i].FileName;

但是现在,我的 .txt 文件是这样的:

项目名称###日期###status.txt

我喜欢在加载到 ListView 之前格式化文件名。在### 之后,字符串应该进入一个子项。所以最后它应该是这样的:

ListView Item = Projectname
ListView Subitem1 = Date
ListView SubItem2 = status

我怎样才能做到这一点?

4

1 回答 1

0

只需使用PosandCopy将部分分离成单独的部分,然后根据需要添加它们:

编辑:修复了循环内的无意分配i(由复制/粘贴引起,然后将问题中的DirectoryListing循环添加到我的答案中)。声明j了用于索引字符串的新变量。

var
  i, j: Integer;
  ProjName, ProjDate, ProjStatus: string;
  Temp: string;
begin
  // Other code here...
  for i := 2 to IdFTP1.DirectoryListing.Count - 1 do
  begin
    Temp := IdFTP1.DirectoryListing.Items[i].FileName;
    j := Pos('###', Temp);
    ProjName := Copy(Temp, 1, j - 1);
    System.Delete(Temp, 1, j + 2);    // Remove ProjName and three # chars
    j := Pos('###', Temp);
    ProjDate := Copy(Temp, 1, j - 1); // Grab project date
    ProjStatus := Copy(Temp, j + 3, Length(Temp));  // Grab status
    ProjStatus := ChangeFileExt(ProjStatus, '');   // Remove extension from filename
    with ListViewMain.Items.Add do
    begin
      Caption := ProjName;
      SubItems.Add(ProjDate);
      SubItems.Add(ProjStatus);
    end;
  end;
end;

根据您的 Delphi 版本,您可以使用PosEx来消除对 的调用System.Delete,但除非您正在处理大量文件或运行数百万次,否则按照此处的方式进行操作可能没问题。

于 2013-05-20T13:25:53.917 回答