table integrate with rules once ...

Prev Next

Function Names

table integrate with rules once, table integrate with rules once ignore case

Description

This function combines the benefits of table integrate with rules() and table integrate once(). Every entry in the look-up table is referenced only once.

Call as: procedure or function

Restrictions

Indirect parameter passing is disabled

Parameter count

6 - 9 (For parameter description and return values: see table integrate() )

Examples


  table initialize( animals,
      { { Name,      Size,     Speed,     Movement,  Leg count,  Surface,    Special Skills   },
        { Parrot,    small,    50,        flying,    2,          feathers,   immitates voices },
        { Dog,       small,    30,        walking,   4,          hair,       sense of smell   },
        { Cat,       small,    20,        walking,   4,          hair,       night vision     },
        { Fox,       small,    25,        walking,   4,          hair,       relatively smart },
        { Owl,       small,    80,        flying,    2,          feathers,   night vision     },
        { Worm,      tiny,     0.01,      crawling,  0,          mucous skin,unclear          },
        { Whale,     huge,     30,        swimming,  0,          skin,       relatively smart } } );

  headers[] = [animals:..,0]-{Name};


  table initialize( target,
          { { Size,     Speed,     Movement,  Leg count,  Surface, Special Skills, Animal, Double Speed   },
            { '*',      ':mod([.],40)=0','*', '*',        '*',     '*',          "It's an", 2  }, // Speed divisible by 40 -> Owl
            { small,    '20..30',  '*',       '*',        Hair,    '*',          "It's a ", 2   }, // Dog
            { small,    '20..30',  '*',       '*',        Hair,    '*',          "It's a ", 2   }, // Cat
            { small,    '20..30',  '*',       '*',        Hair,    '*',          "It's a ", 2   }, // Fox
            { small,    '20..30',  '*',       '*',        Hair,    '*',          "It's a ", 2   }, // No match
            { '*',      '<1',      '*',       '*',        '*',     '*',          "",        2   } } );

  count[] = table integrate with rules once ignore case ( target, headers[],  {Animal, Movement, Double Speed},
        animals, headers[], {Name,   Movement, Speed},   { append with space, overwrite, mul }, true, Counter );
  // Data integration process: Overwrite movement in target table, Add animal name to 'It's ...' and note double speed.

  echo("List of animals with counted lookups:");
  table list( animals );

  echo("Note: Row 5 resulted in no match because all matching items in the lookup table are already taken.");

  echo("Target table after lookup (", count[], " items found):");
  table list( target );

Output

List of animals with counted lookups:
    0 : Name   | Size  | Speed | Movement | Leg count | Surface     | Special Skills   | Counter
    1 : Parrot | small | 50    | flying   | 2         | feathers    | immitates voices |        
    2 : Dog    | small | 30    | walking  | 4         | hair        | sense of smell   | 1      
    3 : Cat    | small | 20    | walking  | 4         | hair        | night vision     | 1      
    4 : Fox    | small | 25    | walking  | 4         | hair        | relatively smart | 1      
    5 : Owl    | small | 80    | flying   | 2         | feathers    | night vision     | 1      
    6 : Worm   | tiny  | 0.01  | crawling | 0         | mucous skin | unclear          | 1      
    7 : Whale  | huge  | 30    | swimming | 0         | skin        | relatively smart |        

Note: Row 5 resulted in no match because all matching items in the lookup table are already taken.
Target table after lookup (5 items found):
    0 : Size  | Speed          | Movement | Leg count | Surface | Special Skills | Animal      | Double Speed
    1 : *     | :mod([.],40)=0 | flying   | *         | *       | *              | It's an Owl | 160         
    2 : small | 20..30         | walking  | *         | Hair    | *              | It's a  Dog | 60          
    3 : small | 20..30         | walking  | *         | Hair    | *              | It's a  Cat | 40          
    4 : small | 20..30         | walking  | *         | Hair    | *              | It's a  Fox | 50          
    5 : small | 20..30         | *        | *         | Hair    | *              | It's a      | 2           
    6 : *     | <1             | crawling | *         | *       | *              | Worm        | 0.02        

Try it yourself: Open LIB_Function_table_integrate_with_rules_once.b4p in B4P_Examples.zip. Decompress before use.

See also

table integrate with rules
table integrate once
table integrate
table lookup with rules once
table expand with rules once
table digest with rules once