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


Блог уже давно на автономном существовании, нет времени писать. Программирование ушло на второй, если не третий, план – я теперь работаю инженером-конструктором, уже на второй работе. Раньше проектировал сварные металлоконструкции из стальных профильных труб (квадратных и прямоугольных), а теперь – более точные детали станков. А статьи написаны, люди читают, и на этом спасибо. Не так давно один человек попросил исходники 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 на соответствующие элементы из массива. Не лучший вариант для быстродействия, но это не было моей целью.

При использовании материала или исходника ставить прямую ссылку / указывать, что использовали. Спасибо!