Delphi 在字符串上提取超过1个delimeter
使用FindFirst搜索文件后,我在子文件夹中找到了一堆文件。所有文件按名称排列,如Delphi 在字符串上提取超过1个delimeter,delphi,delphi-7,Delphi,Delphi 7,使用FindFirst搜索文件后,我在子文件夹中找到了一堆文件。所有文件按名称排列,如 D:\Folders\SubFolder\SubSubFolders\FilesName#Category#Phase#Range.dat 我想获得文件的完整位置、名称、类别、阶段和范围,并将其存储在stringlist中。例如: procedure TForm1.Button1Click(Sender: TObject); var List:TStringList; begin List := TSt
D:\Folders\SubFolder\SubSubFolders\FilesName#Category#Phase#Range.dat
我想获得文件的完整位置、名称、类别、阶段和范围,并将其存储在stringlist中。例如:
procedure TForm1.Button1Click(Sender: TObject);
var List:TStringList;
begin
List := TStringList.Create;
ExtractStrings(['#'], [],
PChar('D:\Folders\SubFolders\SubSubFolders\FileName#Category#Phase#Range.dat'), List);
ShowMessage(List.Text);
end;
这就是我得到的:
D:\Folders\SubFolders\SubSubFolders\FileName
Category
Phase
Range.dat
我想要的只是
D:\Folders\SubFolders\SubSubFolders\
FileName
Category
Phase
Range.dat
谁能给我详细介绍一下如何做到这一点?谢谢
精炼:
由于我使用的是Delphi版本(Delphi 7),因此无法找到正确的方法,因此我尝试了以下方法:
procedure TForm1.Button1Click(Sender: TObject);
var Lists:TStringList;
s, s_filename, s_directory : string;
begin
s:= 'D:\Folder\SubFolder\SubSubFolder\FileName#Category#Phase#Range.dat';
s_directory := ExtractFilePath(s);
s_filename := ExtractFileName(s);
Memo1.Lines.Clear;
Memo1.Lines.Add(s);
Memo1.Lines.Add(s_directory);
ExtractStrings(['#','.'], [], PChar(s_filename),Memo1.Lines);
end;
得到了我想要的,但是,如何将这些字符串插入到字符串数组中,比如列表:TStringList,而不是Memo1.line?我遇到了访问冲突。
在\上拆分,然后在#上拆分最后一个条目。您不指定版本,但如果您使用的是XE6(或Appmethod等效工具),则可以执行以下操作:
procedure GetFileDetails(const FileName: string; Details: TStrings);
var
S: string;
begin
Details.BeginUpdate;
try
Details.Clear;
S := ExtractFilePath(FileName);
if S <> '' then Details.Add(S);
Details.AddStrings(FileName.Substring(S.Length).Split(['#']));
finally
Details.EndUpdate;
end;
end;
过程GetFileDetails(常量文件名:string;详细信息:TStrings);
变量
S:字符串;
开始
Details.BeginUpdate;
尝试
细节。清晰;
S:=提取文件路径(文件名);
如果是“”,则为详细信息。添加;
Details.AddStrings(FileName.Substring(S.Length).Split(['#']);
最后
Details.EndUpdate;
结束;
结束;
string
类型(通过助手)在XE3中获得了一个Split
方法,但在XE6之前,它是一个完整的狗。这里我们直截了当地说
procedure ExtractDetails( const AFilename : string; ADetails : TStrings );
begin
ADetails.Delimiter := '#';
// ADetails.StrictDelimiter := True; // AFAIK work not with Delphi 7
ADetails.DelimitedText := ExtractFileName( AFilename );
ADetails.Insert( 0, ExtractFilePath( AFilename ) );
end;
您需要一个拆分函数。这方面的问题很多。网络搜索可以做到这一点。很多人使用TStringList,这很好用。没关系,我只是忘了添加:list:=TStringList.Create;
procedure ExtractDetails( const AFilename : string; ADetails : TStrings );
begin
ADetails.Delimiter := '#';
// ADetails.StrictDelimiter := True; // AFAIK work not with Delphi 7
ADetails.DelimitedText := ExtractFileName( AFilename );
ADetails.Insert( 0, ExtractFilePath( AFilename ) );
end;