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 на соответствующие элементы из массива. Не лучший вариант для быстродействия, но это не было моей целью.
При использовании материала или исходника ставить прямую ссылку / указывать, что использовали. Спасибо!
Тоже частенько испытываю ностальгию по своим старым детищам, так что отлично вас понимаю Дмитрий ;)