Delphi - 从FTP格式化文件名

时间:2013-05-20 12:37:50

标签: string delphi listview split format

好吧,我有以下问题:

我想在特殊文件夹中获取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之前格式化文件名。在###之后,字符串应该进入Subitem。 所以最后看起来应该是这样的:

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

我该怎么做?

1 个答案:

答案 0 :(得分:0)

只需使用PosCopy将各个部分分成不同的部分,然后根据需要添加:

编辑:修复了循环内对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的调用,但除非您处理大量文件或运行数百万次,否则可能没问题做它在这里的方式。