2013-05-20 49 views
0

好啦,我已經下列問題:德爾福 - 從FTP格式文件名

我喜歡讓所有.txt文件的列表,我的FTP服務器上的一個特殊的文件夾。 我已經解決了這個問題。

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 

我怎樣才能做到這一點?

+0

可以使用複製和Pos或更好PosEx和解決方案應該很容易找到谷歌 –

回答

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,但除非你正在處理大量的文件或運行此數百萬次,它可能是細做的方式,在這兒。

+0

我已經Delphi的XE2架構師。 i:= Pos('###',Temp); 在這一行德爾福給予的我一個錯誤... > > C:\用戶\用戶\桌面\ MyProject的\客戶\ 0.2版本 - > Kopie \ Unit1.pas(153,7):錯誤E2081: E2081 Anweisungfür > FOR-Schleifenvariablen'i' –