program ExplodeDemo;
type
TStringArray = array of string;
function Explode(separator, input: string; limit: Integer): TStringArray;
var
parts: TStringArray;
startPos, sepPos, splits: Integer;
begin
SetLength(parts, 0);
startPos := 1;
splits := 0;
while (splits < limit - 1) do
begin
sepPos := Pos(separator, Copy(input, startPos, Length(input) - startPos + 1));
if sepPos = 0 then Break;
// Adjust sepPos relative to full string
sepPos := sepPos + startPos - 1;
SetLength(parts, Length(parts) + 1);
parts[High(parts)] := Copy(input, startPos, sepPos - startPos);
startPos := sepPos + Length(separator);
Inc(splits);
end;
// Add the remaining part
SetLength(parts, Length(parts) + 1);
parts[High(parts)] := Copy(input, startPos, Length(input) - startPos + 1);
Explode := parts;
end;
var
text, delimiter: string;
limit, i: Integer;
parts: TStringArray;
begin
text := 'c++,c,python,php,java';
delimiter := ',';
limit := 3;
parts := Explode(delimiter, text, limit);
for i := Low(parts) to High(parts) do
Writeln(parts[i]);
end.
(*
run:
c++
c
python,php,java
*)