SmartStepping2.ecl 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. //
  2. // Example code - use without restriction.
  3. //
  4. Rec := RECORD,MAXLENGTH(4096)
  5. STRING1 Letter;
  6. UNSIGNED1 DS;
  7. UNSIGNED1 Matches := 0;
  8. UNSIGNED1 LastMatch := 0;
  9. SET OF UNSIGNED1 MatchDSs := [];
  10. END;
  11. ds1 := DATASET([{'A',1},{'B',1},{'C',1},{'D',1},{'E',1}],Rec);
  12. ds2 := DATASET([{'A',2},{'B',2},{'H',2},{'I',2},{'J',2}],Rec);
  13. ds3 := DATASET([{'B',3},{'C',3},{'M',3},{'N',3},{'O',3}],Rec);
  14. ds4 := DATASET([{'A',4},{'B',4},{'R',4},{'S',4},{'T',4}],Rec);
  15. ds5 := DATASET([{'B',5},{'V',5},{'W',5},{'X',5},{'Y',5}],Rec);
  16. SetDS := [ds1,ds2,ds3,ds4,ds5];
  17. Rec XF(Rec L,DATASET(Rec) Matches) := TRANSFORM
  18. SELF.Matches := COUNT(Matches);
  19. SELF.LastMatch := MAX(Matches,DS);
  20. SELF.MatchDSs := SET(Matches,DS);
  21. SELF := L;
  22. END;
  23. j1 := JOIN( SetDS,STEPPED(LEFT.Letter=RIGHT.Letter),XF(LEFT,ROWS(LEFT)),SORTED(Letter));
  24. O1 := OUTPUT(j1);
  25. Rec XF1(Rec L,Rec R,integer MatchSet) := TRANSFORM
  26. SELF.Matches := L.Matches + 1;
  27. SELF.LastMatch := MatchSet;
  28. SELF.MatchDSs := L.MatchDSs + [MatchSet];
  29. SELF := L;
  30. END;
  31. j2 := JOIN( ds1,ds2,LEFT.Letter=RIGHT.Letter,XF1(LEFT,RIGHT,2));
  32. j3 := JOIN( j2,ds3, LEFT.Letter=RIGHT.Letter,XF1(LEFT,RIGHT,3));
  33. j4 := JOIN( j3,ds4, LEFT.Letter=RIGHT.Letter,XF1(LEFT,RIGHT,4));
  34. j5 := JOIN( j4,ds5, LEFT.Letter=RIGHT.Letter,XF1(LEFT,RIGHT,5));
  35. O2 := OUTPUT(SORT(j5,Letter));
  36. j6 := JOIN( SetDS,STEPPED(LEFT.Letter=RIGHT.Letter),XF(LEFT,ROWS(LEFT)),SORTED(Letter),LEFT OUTER);
  37. j7 := JOIN( SetDS,STEPPED(LEFT.Letter=RIGHT.Letter),XF(LEFT,ROWS(LEFT)),SORTED(Letter),LEFT ONLY);
  38. j8 := JOIN( SetDS,STEPPED(LEFT.Letter=RIGHT.Letter),XF(LEFT,ROWS(LEFT)),SORTED(Letter),MOFN(3));
  39. j9 := JOIN( SetDS,STEPPED(LEFT.Letter=RIGHT.Letter),XF(LEFT,ROWS(LEFT)),SORTED(Letter),MOFN(3,4));
  40. O3 := OUTPUT(j6);
  41. O4 := OUTPUT(j7);
  42. O5 := OUTPUT(j8);
  43. O6 := OUTPUT(j9);
  44. j10 := JOIN( RANGE(SetDS,[1,3,5]),STEPPED(LEFT.Letter=RIGHT.Letter),XF(LEFT,ROWS(LEFT)),SORTED(Letter));
  45. O7 := OUTPUT(j10);
  46. SEQUENTIAL(O1,O2,O3,O4,O5,O6,O7);