(gawk.info)Numeric Array Subscripts
Using Numbers to Subscript Arrays
=================================
An important aspect of arrays to remember is that *array subscripts
are always strings*. If you use a numeric value as a subscript, it
will be converted to a string value before it is used for subscripting
(Note: Conversion of Strings and Numbers.).
This means that the value of the built-in variable `CONVFMT' can
potentially affect how your program accesses elements of an array. For
example:
xyz = 12.153
data[xyz] = 1
CONVFMT = "%2.2f"
if (xyz in data)
printf "%s is in data\n", xyz
else
printf "%s is not in data\n", xyz
This prints `12.15 is not in data'. The first statement gives `xyz' a
numeric value. Assigning to `data[xyz]' subscripts `data' with the
string value `"12.153"' (using the default conversion value of
`CONVFMT', `"%.6g"'), and assigns one to `data["12.153"]'. The program
then changes the value of `CONVFMT'. The test `(xyz in data)'
generates a new string value from `xyz', this time `"12.15"', since the
value of `CONVFMT' only allows two significant digits. This test fails,
since `"12.15"' is a different string from `"12.153"'.
According to the rules for conversions (Note: Conversion of Strings
and Numbers.), integer values are always converted to
strings as integers, no matter what the value of `CONVFMT' may happen
to be. So the usual case of:
for (i = 1; i <= maxsub; i++)
do something with array[i]
will work, no matter what the value of `CONVFMT'.
Like many things in `awk', the majority of the time things work as
you would expect them to work. But it is useful to have a precise
knowledge of the actual rules, since sometimes they can have a subtle
effect on your programs.
Next: Uninitialized Subscripts Prev: Delete Up: Arrays
[ Dokumentation lokal installierter Software ]