指定されたデータ値の オフセット(ファイル内の位置)を計算するには、指定された変数型 nc_type に適切なデータ値の一つの外部サイズ(バイト単位)を external_sizeof とする。
NC_BYTE 1
NC_CHAR 1
NC_SHORT 2
NC_INT 4
NC_FLOAT 4
NC_DOUBLE 8
NF_OPEN (or NF_ENDDEF)呼び出しは前もって var_arrayと示された 変数配列内をスキャンし、 recsize を計算するために"記録”変数の vsize の和を計算する。
変数の次元サイズの積を右から左にとっていき、記録変数の最も左の(記録)次元は飛ばし、各変数についての結果を product 配列に格納する。例えば:
Non-record variable:
dimension lengths: [ 5 3 2 7]
product: [210 42 14 7]
Record variable:
dimension lengths: [0 2 9 4]
product: [0 72 36 4]
この時点では、最も左にある積を次の4の倍数に丸めたものが変数サイズ、すなわち、上の文法においては vsize になる。例えば、上記の非記録変数では、 vsize フィールド値は 212 (210を次の4の倍数に丸めた値)となる。記録変数に対しては、 vsize の値はちょうど 72である。なぜならば、72は既に4の倍数であるからである。
求めるデータ値の座標の配列を coord とし、求める結果を offset とする。この時、 offset は単に、求める変数の最初のデータ値のファイルオフセット(その begin フィールド)に coord と productベクトル の内積を変数の各データのサイズ(バイト単位)を掛けたものを加えた値となる。最後に、もしその変数が記録変数であれば、 記録数 `coord[0]' と記録サイズ recsize との積が加算され、最終的な offset 値が導かれる。
擬似C コードにおける offset の計算は次のようになる。
for (innerProduct = i = 0; i < var.rank; i++)
innerProduct += product[i] * coord[i]
offset = var.begin;
offset += external_sizeof * innerProduct
if(IS_RECVAR(var))
offset += coord[0] * recsize;
故に、(外部表現法の)データ値を取得するには、次のようになる。
lseek(fd, offset, SEEK_SET);
read(fd, buf, external_sizeof);
特殊例:記録変数が一つしかない場合には 、各記録が4倍と境界に合っていなければならないという制限をはずすので、この場合には記録の詰め込みが行なわれません。