德尔福 - 从FTP格式文件名
问题描述:
好啦,我已经下列问题:德尔福 - 从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
我怎样才能做到这一点?
答
只需使用Pos
和Copy
的部分分离出来,成为独立的部分,然后添加他们为你想:
编辑:固定无意分配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' –
可以使用复制和Pos或更好PosEx和解决方案应该很容易找到谷歌 –