Up|<<Prev|Next>>


7.12 値の配列を読む: nc_get_vara_ type

関数 nc_get_vara_ type の一族は開かれたNetCDFファイルの変数から値の配列を読み取ります。 配列は隅の位置と各辺の長さを表わすベクトルを与えて指定します。値は 最後の 次元が最も早く変化するように、次々と読み込まれます。

 

int nc_get_vara_text (int ncid, int varid, const size_t start[],

const size_t count[] char *tp);

int nc_get_vara_uchar (int ncid, int varid, const size_t start[],

const size_t count[] unsigned char *up);

int nc_get_vara_schar (int ncid, int varid, const size_t start[],

const size_t count[] signed char *cp);

int nc_get_vara_short (int ncid, int varid, const size_t start[],

const size_t count[] short *sp);

int nc_get_vara_int (int ncid, int varid, const size_t start[],

const size_t count[] int *ip);

int nc_get_vara_long (int ncid, int varid, const size_t start[],

const size_t count[] long *lp);

int nc_get_vara_float (int ncid, int varid, const size_t start[],

const size_t count[] float *fp);

int nc_get_vara_double(int ncid, int varid, const size_t start[],

const size_t count[] double *dp);

 

ncid

以前の nc_open 又は nc_create 呼び出しで返されたNetCDF ID。

varid

変数ID。

start

全ての書き込まれるデータの中で先頭のデータ値が読み込まれる変数を指定する、サイズ_tの整数のベクトル。インデックスは零に相対的なので、変数の最初のデータ値のインデックスは(0,0、...、0)になります。 start の長さは 指定された変数の次元数と一致していなければなりません。 start の要素は指定された変数の次元と順番に対応しています。よって、記録変数の場合には、最初のインデックスはデータ値を読み取る開始記録番号に相当する。

count

読み取るデータ値の塊の各次元の辺の長さを指定するサイズ_t の整数ベクトル。 例えば単一の値を読み取る場合には、 count (1, 1, ... , 1) と指定すればよい。 count の長さは指定された変数の次元の数に相当する。 count の要素は変数の次元に順番に対応する。よって、記録変数の場合には count の最初の要素が読み取る記録数の総計に対応する。

tp, up, cp, sp, ip, lp, fp, or , dp

データ値が読み込まれる位置へのポインタ。データ型がNetCDF変数型と異なる場合にはタイプ変換が行なわれます。 詳細はタイプ変換を参照のこと。

 

エラーが発生していなければ、関数 nc_get_vara_ type NC_NOERR の値を返します。それ以外の場合は、返されたステータスがエラーが発生したことを示します。エラーの原因としては:

 

この例では nc_get_vara_double を使用して 既存の NetCDF ファイル foo.nc の変数 rh から値の配列を読み込みます。簡潔のためにこの例では変数 rh の次元は time , lat , と lon であり、 time 値は3個、 lat 値は5個、そして lon 値は10個あることを既知とします。

#include <netcdf.h>
   ... 
#define TIMES 3
 #define LATS 5
#define LONS 10
int  status;                       /* エラーステータス */
int ncid;                          /* NetCDF ID */
int rh_id;                         /* 変数 ID */
static size_t start[] = {0, 0, 0}; /* 最初の値から開始 */
static size_t count[] = {TIMES, LATS, LONS};
double rh_vals[TIMES*LATS*LONS];   /* 値を保持する配列 */
   ... 
status = nc_open("foo.nc", NC_NOWRITE, &ncid);
if (status != NC_NOERR) handle_error(status);
   ... 
status = nc_inq_varid (ncid, "rh", &rh_id);
if (status != NC_NOERR) handle_error(status);
   ... 
/* NetCDF変数から値を読み取る */
status = nc_get_vara_double(ncid, rh_id, start, count, rh_vals);
if (status != NC_NOERR) handle_error(status);

Up|<<Prev|Next>>