DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH
 

(gawk.info.gz) Numeric Array Subscripts

Info Catalog (gawk.info.gz) Delete (gawk.info.gz) Arrays (gawk.info.gz) Uninitialized Subscripts
 
 Using Numbers to Subscript Arrays
 =================================
 
    An important aspect about arrays to remember is that _array
 subscripts are always strings_.  When a numeric value is used as a
 subscript, it is converted to a string value before being used for
 subscripting ( Conversion of Strings and Numbers Conversion.).
 This means that the value of the built-in variable `CONVFMT' can 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"').  Thus, the array element `data["12.153"]' is
 assigned the value one.  The program then changes the value of
 `CONVFMT'.  The test `(xyz in data)' generates a new string value from
 `xyz'--this time `"12.15"'--because 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 ( Conversion of Strings
 and Numbers Conversion.), 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 the following works:
 
      for (i = 1; i <= maxsub; i++)
          do something with array[i]
 
    The "integer values always convert to strings as integers" rule has
 an additional consequence for array indexing.  Octal and hexadecimal
 constants ( Octal and Hexadecimal Numbers Nondecimal-numbers.)
 are converted internally into numbers, and their original form is
 forgotten.  This means, for example, that `array[17]', `array[021]', and
 `array[0x11]' all refer to the same element!
 
    As with many things in `awk', the majority of the time things work
 as one would expect them to.  But it is useful to have a precise
 knowledge of the actual rules which sometimes can have a subtle effect
 on your programs.
 
Info Catalog (gawk.info.gz) Delete (gawk.info.gz) Arrays (gawk.info.gz) Uninitialized Subscripts
automatically generated byinfo2html