[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: variable string in attribute and char variables
- Subject: Re: variable string in attribute and char variables
- Date: Mon, 03 Feb 2003 14:05:47 -0700
>To: address@hidden
>From: Igor Pesenson <address@hidden>
>Subject: Re: 20030203: subject
>Organization: Lawrence Berkeley National Laboratory
>Keywords: 200302031956.h13Ju0623075
Hi Igor,
> I've only recentely started using cdf and I have two, hopefully
> simple, questions.
> 1) I'm trying to document an attribute in the following way (taken from
> someone else's file):
> int base_time ;
> base_time:string = "12-Nov-2002,0:00:00 GMT" ;
> base_time:long_name = "Base time in Epoch" ;
> But I can't figure out how to do this. I've created a char variable to
> hold the "string" value, but I can't seem to put it in properly. My code
> says:
>
> char base_time_str[25];
> nc_status=nc_def_var(ncid,"base_time",NC_INT,0,&idimid,&ivarid[1]);
> nc_status=nc_put_att_text(ncid,out.ivarid[1],"string",strlen(base_time_str),
> base_time_str);
>
> and it fails with the result of:
>
> int base_time ;
> base_time:string = "" ;
> The cdf documentation requires that the base_time_str was type "const
> char" but this would prevent it changing from file to file. Am I
> horribly misguided?
I think
> nc_status=nc_put_att_text(ncid,out.ivarid[1],"string",strlen(base_time_str),
> base_time_str);
should instead be
nc_status=nc_put_att_text(ncid,ivarid[1],"string",strlen(base_time_str),
base_time_str);
given that you stored the variable ID in "ivarid[1]". I've appended a
C program generated by using "ncgen -c igor.cdl" that seems to work,
if you need a complete example. I used the following CDL file for
input to ncgen:
netcdf igor {
variables:
int base_time ;
base_time:string = "12-Nov-2002,0:00:00 GMT" ;
base_time:long_name = "Base time in Epoch" ;
}
I'll send a separate reply to your second question, assuming I can
figure it out.
--Russ
#include <stdio.h>
#include <stdlib.h>
#include <netcdf.h>
void
check_err(const int stat, const int line, const char *file) {
if (stat != NC_NOERR) {
(void) fprintf(stderr, "line %d of %s: %s\n", line, file,
nc_strerror(stat));
exit(1);
}
}
int
main() { /* create igor.nc */
int ncid; /* netCDF id */
/* variable ids */
int base_time_id;
/* rank (number of dimensions) for each variable */
# define RANK_base_time 0
/* enter define mode */
int stat = nc_create("igor.nc", NC_CLOBBER, &ncid);
check_err(stat,__LINE__,__FILE__);
/* define variables */
stat = nc_def_var(ncid, "base_time", NC_INT, RANK_base_time, 0,
&base_time_id);
check_err(stat,__LINE__,__FILE__);
/* assign attributes */
stat = nc_put_att_text(ncid, base_time_id, "string", 23,
"12-Nov-2002,0:00:00 GMT");
check_err(stat,__LINE__,__FILE__);
stat = nc_put_att_text(ncid, base_time_id, "long_name", 18, "Base time in
Epoch");
check_err(stat,__LINE__,__FILE__);
/* leave define mode */
stat = nc_enddef (ncid);
check_err(stat,__LINE__,__FILE__);
stat = nc_close(ncid);
check_err(stat,__LINE__,__FILE__);
return 0;
}