2.5. Changing food traits
Prev | Chapter 2. Basic Pantry commands | Next

## 2.5. Changing food traits

Pantry would not be very useful if you could only search the `master` for its contents and print results from it. Fortunately, Pantry makes it very easy for you to change the traits of foods.

When you run pantry with the search options we discussed above, pantry first searches the files you specified for foods with the traits you specified with your options. pantry then changes the resulting foods to the traits you specify, as we will discuss next. For instance, in the next example we change the `date` trait of a raw banana. However, as the example also shows, the change is only temporary. Only the food in the buffer is changed, and the food in the buffer is a copy of the food in the `master` file. Later we will learn how to save the new foods that you make.

Example 2.14. Changing foods

    $ pantry --name "Bananas, raw" --print traits master
    Bananas, raw
    Group: Fruits and Fruit Juices
    Refuse: 36 percent Skin
    100 g (100g)

    $ pantry --name "Bananas, raw" --c-date "2007-05-06" \
    > --print traits master
    Bananas, raw
    Group: Fruits and Fruit Juices
    Date: 2007-05-06
    Refuse: 36 percent Skin
    100 g (100g)

    $ pantry --name "Bananas, raw" --print traits master
    Bananas, raw
    Group: Fruits and Fruit Juices
    Refuse: 36 percent Skin
    100 g (100g)

There are eight options you use to change food traits. Each takes an argument to indicate what you would like to change the trait to:

- `--c-name` or `-N`

- `--c-group` or `-G`

- `--c-date` or `-D`

- `--c-meal` or `-M`

- `--c-comment` or `-C`

- `--c-unit` or `-U`

- `--c-qty` or `-Q`

- `--c-order` or `-O`

Changing most traits is easy, as you may change them to any string that you wish, including a zero-length string. This gives you a great deal of flexibility. The `group` trait need not be set to a "official" food group. The `date` trait does not need to respect any particular date format--indeed, strictly speaking, it need not be any date at all!

Only two traits are not this flexible. As with the other traits, Pantry stores the `qty` trait as a string, but it is converted internally to a number as needed, so the value of this trait must be something that can be converted to a number. It can be an integer, a floating-point number, or even a fraction or mixed number. Thus, the following values are valid for the `qty` trait:

- `3`

- `1/3`

- `3 1/3`

- `3.33`

Entering zero for the `qty` trait does not delete foods; later we'll discuss how to delete foods.

The other inflexible trait is the `unit` trait. This trait must be equal to one of the available units for each particular food. The argument that the `--c-unit` takes is actually a regular expression. pantry searches the food's available units for a single unit matching that regular expression.

Example 2.15. Changing the unit trait

    $ pantry --name "Bananas, raw" --c-date "May 7" \
    > --c-qty 2 --c-unit medium --print traits-nuts master
    Bananas, raw
    Group: Fruits and Fruit Juices
    Date: May 7
    Refuse: 36 percent Skin
    2 medium (7" to 7-7/8" long) (236g)
    Nutrient                  Amount         %G     %TOT
    -------------------------------------------------------
    Calories                  210  kcal       11     100
    Total Fat                 1    g          1      100
    Saturated Fat             0    g          1      100
    Cholesterol               0    mg         0      0
    Sodium                    2    mg         0      100
    Total Carbohydrate        54   g          18     100
    Dietary Fiber             6    g          25     100
    Sugars                    29   g          NA     100
    Protein                   3    g          5      100
    Vitamin A                 151  IU         3      100
    Vitamin C                 21   mg         34     100
    Calcium                   12   mg         1      100
    Iron                      1    mg         3      100

If the regular expression you enter as an argument for `--c-unit` matches more than one of a food's available units, pantry will give you a warning message. pantry will not include the food (either changed or unchanged) in the search results; therefore, the food will not be printed in any reports you may have asked for using the `--print` option. However, Pantry will still include in the search results other foods that it did change. In the next example, the food `Bananas, raw` cannot have its units changed, because the search string `cup` matches more than one of the food's available units. However, the food `Bananas, dehydrated, or banana powder` is included in the search results because its unit was successfully changed.

Example 2.16. Errors when changing the unit trait

    $ pantry --name "Bananas," --print traits-units master
    Bananas, dehydrated, or banana powder
    Group: Fruits and Fruit Juices
    100 g (100g)
       cup
       tbsp
    Bananas, raw
    Group: Fruits and Fruit Juices
    Refuse: 36 percent Skin
    100 g (100g)
       cup, mashed
       large (8" to 8-7/8" long)
       medium (7" to 7-7/8" long)
       extra small (less than 6" long)
       small (6" to 6-7/8" long)
       NLEA serving
       cup, sliced
       extra large (9" or longer)

    $ pantry --name "Bananas," --c-unit cup --print traits-units \
    > master
    ==========
    pantry: warning: food Bananas, raw will not be copied into the buffer.
    More than one matching unit for --c-unit argument cup. Matches:
    cup, mashed
    cup, sliced
    ==========
    Bananas, dehydrated, or banana powder
    Group: Fruits and Fruit Juices
    100 cup (10000g)
       cup
       tbsp

As we discussed, you can use fractions and mixed numbers for the `qty` trait:

Example 2.17. `qty` may be a fraction or mixed number

    $ pantry --name "Bananas, raw" --c-qty "1/2" \
    > --c-unit medium --print traits-nuts master
    Bananas, raw
    Group: Fruits and Fruit Juices
    Refuse: 36 percent Skin
    1/2 medium (7" to 7-7/8" long) (59g)
    Nutrient                  Amount         %G     %TOT
    -------------------------------------------------------
    Calories                  53   kcal       3      100
    Total Fat                 0    g          0      100
    Saturated Fat             0    g          0      100
    Cholesterol               0    mg         0      0
    Sodium                    1    mg         0      100
    Total Carbohydrate        13   g          4      100
    Dietary Fiber             2    g          6      100
    Sugars                    7    g          NA     100
    Protein                   1    g          1      100
    Vitamin A                 38   IU         1      100
    Vitamin C                 5    mg         9      100
    Calcium                   3    mg         0      100
    Iron                      0    mg         1      100

    $ pantry --name "Bananas, raw" --c-qty "2 1/2" \
    > --c-unit medium --print traits-nuts master
    Bananas, raw
    Group: Fruits and Fruit Juices
    Refuse: 36 percent Skin
    2 1/2 medium (7" to 7-7/8" long) (295g)
    Nutrient                  Amount         %G     %TOT
    -------------------------------------------------------
    Calories                  263  kcal       13     100
    Total Fat                 1    g          1      100
    Saturated Fat             0    g          2      100
    Cholesterol               0    mg         0      0
    Sodium                    3    mg         0      100
    Total Carbohydrate        67   g          22     100
    Dietary Fiber             8    g          31     100
    Sugars                    36   g          NA     100
    Protein                   3    g          6      100
    Vitamin A                 189  IU         4      100
    Vitamin C                 26   mg         43     100
    Calcium                   15   mg         1      100
    Iron                      1    mg         4      100

Prev | Up | Next
2.4. Details on searching | Home | 2.6. Using nutrient lists to compare foods to particular nutrient goals