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

と を使用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ますが、大量のファイルを処理したり、何百万回も実行したりしない限り、ここにある方法で問題ないでしょう。

于 2013-05-20T13:25:53.917 に答える