Janilabo

Janilabo | Expand()

Aug 12th, 2012
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 2.37 KB | None | 0 0
  1. function Expand(trgt_pos: Integer; s1, s2, str: string): string;
  2. var
  3.   l, p, start, finish, s1L, s2L: Integer;
  4.   tmp: string;
  5. begin
  6.   l := Length(str);
  7.   s1L := Length(s1);
  8.   s2L := Length(s2);
  9.   if ((s1L > l) or (s2L > l) or (trgt_pos > l) or (trgt_pos < 1)) then
  10.     Exit;
  11.   finish := PosEx(s2, str, trgt_pos);
  12.   if ((finish < 1) or (finish = trgt_pos)) then
  13.     Exit;
  14.   tmp := Copy(str, 1, trgt_pos);
  15.   repeat
  16.     p := PosEx(s1, tmp, (p + 1));
  17.     if (p > 0) then
  18.       start := p;
  19.   until (p <= 0);
  20.   if ((start <> trgt_pos) and (start > 0) and (finish > 0) and (start < finish)) then
  21.     Result := Copy(str, (start + s1L), ((finish - start) - s2L));
  22.   tmp := '';
  23. end;
  24.  
  25. var
  26.   str, tmp: string;
  27.   id, id_pos: Integer;
  28.  
  29. begin
  30.   ClearDebug;
  31.   str := '<item_list>' + #13#10 +
  32.          '  <item_data>' + #13#10 +
  33.          '    <item_name>Apple</item_name>' + #13#10 +
  34.          '    <item_category>Fruits</item_category>' + #13#10 +
  35.          '    <item_ID>2</item_ID>' + #13#10 +
  36.          '    <item_description>Great fruit</item_description>' + #13#10 +
  37.          '  </item_data>' + #13#10 +
  38.          '  <item_data>' + #13#10 +
  39.          '    <item_name>Strawberry</item_name>' + #13#10 +
  40.          '    <item_category>Berries</item_category>' + #13#10 +
  41.          '    <item_ID>0</item_ID>' + #13#10 +
  42.          '    <item_description>Sweet berry</item_description>' + #13#10 +
  43.          '  </item_data>' + #13#10 +
  44.          '  <item_data>' + #13#10 +
  45.          '    <item_name>Tomato</item_name>' + #13#10 +
  46.          '    <item_category>Vegetables</item_category>' + #13#10 +
  47.          '    <item_ID>1</item_ID>' + #13#10
  48.          '    <item_description>Healthy vegetable</item_description>' + #13#10 +
  49.          '  </item_data>' + #13#10 +
  50.          '</item_list>';
  51.   for id := 0 to 2 do
  52.   begin
  53.     id_pos := Pos(('<item_ID>' + IntToStr(id) + '</item_ID>'), Between('<item_list>', '</item_list>', str));
  54.     if (id_pos > 0) then
  55.     begin
  56.       tmp := Expand(id_pos, '<item_data>', '</item_data>', str);
  57.       WriteLn('Item nr.' + IntToStr(id) + ':' + #13#10 +
  58.               'Name: ' + Between('<item_name>', '</item_name>', tmp) + #13#10
  59.               'Description: ' + Between('<item_description>', '</item_description>', tmp) + #13#10
  60.               'Category: ' + Between('<item_category>', '</item_category>', tmp) + #13#10);
  61.       tmp := '';
  62.     end;
  63.   end;
  64. end.
Advertisement
Add Comment
Please, Sign In to add comment