文字 列 は 基本的なNetCDF外部データ型ではありません。なぜならば、FORTRANでは可変長の文字列の抽象化をサポートしていないからです。( FORTRANの LEN 関数は文字列の動的な長さではなく、静的な長さを返します。) その結果、NetCDFインターフェースでは文字列は単一のオブジェクトとして読み書きすることが出来ません。文字列は文字の配列として扱わなければならないのです。それ故、NetCDFファイルの変数データとして文字列を読み書きするためには配列アクセスをしなければなりません。さらに、NetCDFインターフェースでは可変長の文字列は規約による場合を除いてはサポートされていません。例えば、零バイトを文字列を終了するものとして扱うことは可能ですが、NetCDF変数に読み書きされる文字列の長さを明示しなければなりません。
文字列を属性値として扱えば使用しやすくなる。それは文字列がアクセスする際に一つの単位として扱われるからである。しかしながら、文字列の属性値の値はやはり固有の長さを持つ文字の配列であり、その長さは属性が定義されるときに指定される必要がある。
文字列値を持つ変数を定義する際には, 文字列位置次元 character-position dimension を最も早く変化する次元として使用しなければならない。 ( FORTRAN の変数において最初の次元)文字列次元の長さは文字列変数に格納されるあらゆる文字列の最大長である。 最大長の列を格納するスペースは、使用するか否かにかかわらず、文字列変数のディスク表現の中に割り当てられる。 仮に、2個以上の変数の最大長が同じである場合には、変数の形を定義するにあたって同じ文字位置次元を使用しても良い。
文字列変数に文字列の値を書き込むには、全変数アクセスもしくは配列アクセスを使用します。後者を使用する場合には隅と縁の長さのベクトルの両方を指定する必要があります。文字位置次元の隅はFORTRAN において1 です。 もし書き込む列の長さが n と仮定すると、縁の長さのベクトルは文字位置次元に n を指定し、他の次元には全て1を指定します: (n, 1, 1, ..., 1) 。
FORTRANにおいてはスペースを節約するために、固定長の文字列はNetCDFファイルに終了文字無しで書き込むことが出来ます。可変長の文字列は Cのnull文字を加える 規約に従い、後にC 又は FORTRANのプログラムで目的となる文字列の長さが識別できるようにしておかなければなりません。
文字列を読み書きするためのFORTRAN インターフェースは 文字列値と数値をアクセスとをするのには異なる関数を必要とします。 それは、標準のFORTRANでは文字列値と数値の両方に同じ正式なパラメータを使用することが禁じられているからです。さらに、 NF_PUT_VARA_TEXT と NF_GET_VARA_TEXTにおいては、 指定された、値として扱われた文字列の長さを指定する別の引数が必要です。文字列の実際の長さは、対応する文字位置次元の縁の長さベクトルの値として指定されます。
この例では、文字列を扱う記録変数 tx を定義し、 NF_PUT_VARA_TEXT を使用して文字列値を3番目の記録に書き込みます。ここでは、文字列変数とデータは既に未制限記録次元 time を持つ既存のNetCDFファイル foo.nc に書き加えられると仮定します。
INCLUDE 'netcdf.inc'
...
INTEGER TDIMS, TXLEN
PARAMETER (TDIMS=2) ! TX次元の数
PARAMETER (TXLEN = 15) ! 文字列の例の長さ
INTEGER NCID
INTEGER CHID ! 文字の位置の次元ID
INTEGER TIMEID ! 記録次元のID
INTEGER TXID ! 変数ID
INTEGER TXDIMS(TDIMS) ! 変数の形
INTEGER TSTART(TDIMS), TCOUNT(TDIMS)
CHARACTER*40 TXVAL ! 最大長40
DATA TXVAL /'example string'/
...
TXVAL(TXLEN:TXLEN) = CHAR(0) ! null terminate
...
STATUS = NF_OPEN('foo.nc', NF_WRITE, NCID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
STATUS = NF_REDEF(NCID) ! 定義モードに入る
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
...
! 最大長が40文字の文字列の文字の位置の次元を定義
STATUS = NF_DEF_DIM(NCID, "chid", 40, CHID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
...
! 文字列の変数を定義する
TXDIMS(1) = CHID ! 最初の文字の位置の次元
TXDIMS(2) = TIMEID
STATUS = NF_DEF_VAR(NCID, "tx", NF_CHAR, TDIMS, TXDIMS, TXID)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
...
STATUS = NF_ENDDEF(NCID) ! 定義モードを抜ける
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)
...
! write txval into tx NetCDF variable in record 3
TSTART(1) = 0 ! 先頭の変数から開始
TSTART(2) = 3 ! 書き込む記録の数
TCOUNT(1) = TXLEN ! 書き込む文字数
TCOUNT(2) = 1 ! 一つの記録のみ記入
STATUS = NF_PUT_VARA_TEXT (NCID, TXID, TSTART, TCOUNT, TXVAL, 40)
IF (STATUS .NE. NF_NOERR) CALL HANDLE_ERR(STATUS)