Hej Jørn
Jeg har lavet følgende klasse nedarvet fra TStringList.
TStrenge = class(TStringlist)
private
procedure SetCommaText(const Value: string);
function GetCommaText: string;
protected
property CommaText: string read GetCommaText write SetCommaText;
end;
implementation
....
function TStrenge.GetCommaText: string;
var
S: string;
P: PChar;
I, Count: Integer;
Seperator : Char;
begin
Seperator := ';'; //<----- Her definerer du din seperator
Count := GetCount;
if (Count = 1) and (Get(0) = '') then
Result := '""'
else
begin
Result := '';
for I := 0 to Count - 1 do
begin
S := Get(I);
P := PChar(S);
while not (P^ in [#0..#31,'"', Seperator]) do P := CharNext(P);
if (P^ <> #0) then S := AnsiQuotedStr(S, '"');
Result := Result + S + Seperator;
end;
System.Delete(Result, Length(Result), 1);
end;
end;
procedure TStrenge.SetCommaText(const Value: string);
var
P, P1: PChar;
S: string;
Seperator : Char;
begin
Seperator := ';'; //<----- Her definerer du din seperator
BeginUpdate;
try
Clear;
P := PChar(Value);
while P^ in [#1..#31] do P := CharNext(P);
while P^ <> #0 do
begin
if P^ = '"' then
S := AnsiExtractQuotedStr(P, '"')
else
begin
P1 := P;
while (P^ > #31) and (P^ <> Seperator) do P := CharNext(P);
SetString(S, P1, P - P1);
end;
Add(S);
while P^ in [#1..#31] do P := CharNext(P);
if P^ = Seperator then
repeat
P := CharNext(P);
until not (P^ in [#1..#31]);
end;
finally
EndUpdate;
end;
end;
Det er en "Quick & Dirty" løsning og kan sikkert laves smartere, men den
virker.
Håber det hjælper
Peter Vrist
pv_notthis_@npt.dk
"Jørn Rasmussen" <post@farman.dk> skrev i en meddelelse
news
%J8.30888$4f4.1188459@news000.worldonline.dk...
> Findes der componenter eller rutiner der kan håndtere semikolon -
> (CSV) og tabulatorseparerede filer på samme måde som
> Strings.Commatext kan håndtere kommaseparerede filer.
>
> på forhånd tak.
> Jørn
>
>
>