#pas
function FParse(var S: string; const Delimiters: char): string;
var
I, Pos: Integer;
P, F: PChar;
begin
P := PChar(S);
F := StrScan(P, Delimiters);
if F <> nil then
begin
Pos := Integer(F) - Integer(P) + 1;
if Pos <= 0 then Pos := Length(S) + 1; //Когда сработает эта строка если if F <> nil ?
end
else
Pos := Length(S) + 1; // ??
Result := S;
S := CopyEnd(Result, Pos + 1);
Result := Copy(Result, 1, Pos - 1);
end;
nesco, штатный GetTok заремал, а вот это хзяйство загнал в Share.pas
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function StrScan(Str: PChar; Chr: Char): PChar; assembler;
asm
PUSH EDI
PUSH EAX
MOV EDI,Str
OR ECX, -1
XOR AL,AL
REPNE SCASB
NOT ECX
POP EDI
XCHG EAX, EDX
REPNE SCASB
XCHG EAX, EDI
POP EDI
JE @@1
MOV EAX,1
@@1: DEC EAX
end {$IFDEF F_P} [ 'EAX', 'EDX', 'ECX' ] {$ENDIF};
function GetTok(var S: string; const c: char): string;
var
I, Pos: Integer;
P, F: PChar;
begin
P := PChar(S);
F := StrScan(P, c);
if F <> nil then
begin
Pos := Integer(F) - Integer(P) + 1;
if Pos <= 0 then Pos := Length(S) + 1;
end
else
Pos := Length(S) + 1;
Result := S;
S := CopyEnd(Result, Pos + 1);
Result := Copy(Result, 1, Pos - 1);
end;
Погонял маленько - вроде полет нормальный