Janilabo

MultiBetween [PascalScript]

Jul 8th, 2013
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 1.71 KB | None | 0 0
  1. function MultiBetween(str, s1, s2: string): TStringArray;
  2. var
  3.   strL, s1L, s2L, o, n, e, r: Integer;
  4. begin
  5.   s1L := Length(s1);
  6.   s2L := Length(s2);
  7.   strL := Length(str);
  8.   if ((s1 <> '') and (s2 <> '') and (strL > (s1L + s2L))) then
  9.   begin
  10.     SetLength(Result, (strL - (s1L + s2L)));
  11.     repeat
  12.       n := PosEx(s1, str, (n + 1));
  13.       if (n < 1) then
  14.         Break;
  15.       e := PosEx(s2, str, (n + 1));
  16.       if (e < 1) then
  17.         Break;
  18.       repeat
  19.         o := n;
  20.         n := PosEx(s1, str, (n + 1));
  21.       until ((n >= e) or (n < 1));
  22.       n := o;
  23.       Result[r] := Between(s1, s2, Copy(str, n, (s1L + (e + s2L))));
  24.       if (Result[r] <> '') then
  25.         Inc(r);
  26.     until ((e < 1) or (n < 1));
  27.   end;
  28.   SetLength(Result, r);
  29. end;
  30.  
  31. var
  32.   h, i: Integer;
  33.   TSA: TStringArray;
  34.   Text: string;
  35.  
  36. begin
  37.   ClearDebug;
  38.   WriteLn('MultiBetween() Test1:');
  39.   Text := '<tag>test1<tag>..<tag>test2dgtsgtsgdsgs<tag>....<tag>test3<tag>.....<tag>test4<tag>.....';
  40.   TSA := MultiBetween(Text, '<tag>', '<tag>');
  41.   h := High(TSA);
  42.   for i := 0 to h do
  43.     WriteLn('TSA[' + IntToStr(i) + ']: ' + TSA[i]);
  44.   WriteLn('');
  45.   SetLength(TSA, 0);
  46.   WriteLn('MultiBetween() Test2:');
  47.   Text := '<tag>test1</tag>....<tag>test2dgtsgtsgdsgs</tag>....<tag>test3</tag>.....<tag>test4</tag>.....';
  48.   TSA := MultiBetween(Text, '<tag>', '</tag>');
  49.   h := High(TSA);
  50.   for i := 0 to h do
  51.     WriteLn('TSA[' + IntToStr(i) + ']: ' + TSA[i]);
  52.   WriteLn('');
  53.   SetLength(TSA, 0);
  54.   WriteLn('MultiBetween() Test3:');
  55.   Text := '||*|*||<|<||[|]||>|>||*|*||';
  56.   TSA := MultiBetween(Text, '|', '|');
  57.   h := High(TSA);
  58.   for i := 0 to h do
  59.     WriteLn('TSA[' + IntToStr(i) + ']: ' + TSA[i]);
  60.   SetLength(TSA, 0);
  61. end.
Advertisement
Add Comment
Please, Sign In to add comment