function ExtractStringsWithNull(Separators, WhiteSpace: TSysCharSet; Content: PChar;
Strings: TStrings): Integer;
var
Head, Tail: PChar;
EOS, InQuote: Boolean;
QuoteChar: Char;
Item: string;
begin
Result := 0;
if (Content = nil) or (Content^=#0) or (Strings = nil) then Exit;
Tail := Content;
InQuote := False;
QuoteChar := #0;
Strings.BeginUpdate;
try
repeat
while Tail^ in WhiteSpace + [#13, #10] do
Inc(Tail);
Head := Tail;
while True do
begin
while (InQuote and not (Tail^ in ['''', '"', #0])) or
not (Tail^ in Separators + [#0, #13, #10, '''', '"']) do
Inc(Tail);
if Tail^ in ['''', '"'] then
begin
if (QuoteChar <> #0) and (QuoteChar = Tail^) then
QuoteChar := #0
else QuoteChar := Tail^;
InQuote := QuoteChar <> #0;
Inc(Tail);
end else Break;
end;
EOS := Tail^ = #0;
// if (Head <> Tail) and (Head^ <> #0) then
begin
if Strings <> nil then
begin
SetString(Item, Head, Tail - Head);
Strings.Add(Item);
end;
Inc(Result);
end;
Inc(Tail);
until EOS;
finally
Strings.EndUpdate;
end;
end;
한가지 풀면 또 다른 문제가 생기는데요....
최용일님이 가르쳐 준데로 했더니...정말 완변하고 빠르게 데이타가 다 입력이 됬는데요, 한가지 문제는 필드값이 Null일경우가 문제가 생기는데요.
가령, 일정한 Array 를 항상 불러서 저장해야 되는데,
ExtractStrings([','],[' '], PChar(TmpStr), MyRecordArray);
를 사용했더니 Null 값이 들어있는 필드는 무시되고 다음 값이 Array 에 저장 됩니다.. 어떻게 이문제를 풀어야 되는지 답변 부탁드리겠습니다......