은 당신은 무엇을 요구하는 것은 DelimitedText
속성 setter에 관계없이 Delimiter
재산의 구분 기호로 공백이 포함의 StrictDelimiter
재산없이 델파이 7에 아직 존재하지 않았다 StrictDelimiter
속성을 필요로하며, 해당 동작을 변경할 수 없습니다. 따라서 대신 입력 문자열을 수동으로 구문 분석해야합니다.
다음 코드는 나중에 델파이 버전에 사용 된 StrictDelimiter
논리에서 파생 된, 그리고 델파이 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;
var
s: String;
sl1, sl2: TStringList;
i: Integer;
begin;
s := ' 0.985,EError can''t find,E| 0,5186,Name,6946';
sl1 := TStringList.Create;
try
sl1.Delimiter := '|';
sl1.QuoteChar := #0;
SplitDelimitedText(s, sl1);
sl2 := TStringList.Create;
try
sl2.Delimiter := ',';
sl2.QuoteChar := #0;
for I := 0 to sl1.Count-1 do
begin
SplitDelimitedText(sl1[i], sl2);
// use sl2 as needed...
end;
finally
sl2.Free;
end;
finally
sl1.Free;
end;
end;
이 질문은 많은 시간을 요구하고있다. 웹 서치를 사용해보십시오. –
* "새로운 절차 없이는해야만합니다."* - 어떤 요구 사항입니까? –