String Delphi 7-使用严格分隔符拆分字符串,而不使用新过程
我需要使用String Delphi 7-使用严格分隔符拆分字符串,而不使用新过程,string,delphi,split,delphi-7,tstringlist,String,Delphi,Split,Delphi 7,Tstringlist,我需要使用“|”作为唯一的分隔符,将以下字符串拆分为TStringList: " 0.985,EError can't find,E| 0,5186,Name,6946" 然后我需要使用,“作为唯一的`分隔符来拆分每个TStringList项 因此,在第一个TStringList中,将有以下项目: " 0.985,EError can't find,E" "0,5186,Name,6946" " 0.985" "ERror can't find" "E" 然后,在第二个TStringLis
“|”
作为唯一的分隔符,将以下字符串拆分为TStringList
:
" 0.985,EError can't find,E| 0,5186,Name,6946"
然后我需要使用,“
作为唯一的`分隔符来拆分每个TStringList
项
因此,在第一个TStringList
中,将有以下项目:
" 0.985,EError can't find,E"
"0,5186,Name,6946"
" 0.985"
"ERror can't find"
"E"
然后,在第二个TStringList
中有以下项目:
" 0.985,EError can't find,E"
"0,5186,Name,6946"
" 0.985"
"ERror can't find"
"E"
我必须在没有新过程的情况下执行此操作。您需要的是StrictDelimiter
属性,它在Delphi 7中还不存在。如果没有StrictDelimiter
属性,则无论Delimiter
属性如何,属性setter都会将空格作为分隔符,并且您无法更改该行为。因此,您必须手动解析输入字符串
以下代码是从以后的Delphi版本中使用的StrictDelimiter
逻辑派生出来的,在Delphi 7中运行良好:
uses
SysUtils, Classes, Windows;
procedure SplitDelimitedText(const Value: string; List: TStrings; StrictDelimiter: Boolean = True);
var
P, P1: PChar;
S: string;
begin
if not StrictDelimiter then
begin
List.DelimitedText := Value;
Exit;
end;
List.BeginUpdate;
try
List.Clear;
P := PChar(Value);
while P^ <> #0 do
begin
if P^ = List.QuoteChar then
S := AnsiExtractQuotedStr(P, List.QuoteChar)
else
begin
P1 := P;
while (P^ <> #0) and (P^ <> List.Delimiter) do
P := CharNext(P);
SetString(S, P1, P - P1);
end;
List.Add(S);
if P^ = List.Delimiter then
begin
P1 := P;
if CharNext(P1)^ = #0 then
List.Add('');
P := CharNext(P);
end;
end;
finally
List.EndUpdate;
end;
end;
这个问题已经被问过很多次了。试试网络搜索。“我必须在没有新程序的情况下完成。”-这是什么要求?