Ровно три года назад (ого! – сам думаю, как быстро время летит) написал и выложил на блог программу reparser.

Блог уже давно на автономном существовании, нет времени писать. Программирование ушло на второй, если не третий, план – я теперь работаю инженером-конструктором, уже на второй работе. Раньше проектировал сварные металлоконструкции из стальных профильных труб (квадратных и прямоугольных), а теперь – более точные детали станков. А статьи написаны, люди читают, и на этом спасибо. Не так давно один человек попросил исходники reparser’а, а я пообещал выложить и позабыл. Так вот, выкладываю.
Выкладываю как есть. Для перестановки частей используется массив строк type TParse=array[1..9] of string;
Парсим строку – делим на части:
function _parse(str,det:string):TParse;
var
_out:TParse;
p,i:integer;
begin
p:=0;
i:=1;
repeat
_out[i]:=Copy(str,p+Length(det),PosEx1(det,str,p+Length(det))-p-Length(det));
p:=PosEx(det,str,p+Length(det));
i:=i+1;
until (p=0) or (i>=10);
Result:=_out;
end;
Просто вырезаем до девяти частей в наш массив, ища позиции разделителя в строке.
Функция для перестановки частей строки местами:
function _concat(_p:TParse;template:string):string;
var
_s:string;
i:integer;
begin
_s:=template;
for i:=1 to 9 do
_s:=StringReplace(_s,'%'+IntToStr(i),_p[i],[rfReplaceAll]);
Result:=_s;
end;
В _p у нас уже части строки – это массив, напомню. Template – шаблон вида %1%2-%3; . Происходит замена вхождений %1..%9 на соответствующие элементы из массива. Не лучший вариант для быстродействия, но это не было моей целью.
При использовании материала или исходника ставить прямую ссылку / указывать, что использовали. Спасибо!
Тоже частенько испытываю ностальгию по своим старым детищам, так что отлично вас понимаю Дмитрий ;)