GetInfo.c
3.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
/** @file GetInfo.c
* @version $Id: GetInfo.c,v 1.1 2013/05/22 13:33:52 budnik Exp $
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <math.h>
#include <netcdf.h>
#include <DD.h>
int DataID, RecID, VarID;
size_t RecNum;
char Var[128];
size_t count[2] = {1L,TIMELENGTH};
size_t start[2] = {0L,0L};
size_t countVar[2] = {1L,128L};
/*---------------- NC ERROR --------------------------------------*/
void nc_handle_error(int status)
{
fprintf(stderr, "%s\n", nc_strerror(status));
exit(1);
}
/* ----------------------- MAIN ------------------------------------*/
int main(int argc, char *argv[])
{
int status, len, infoID, i;
char Project[50],Instrument[50],Mode[50], RInstrName[200], INFO_ID[50];
int dims[10];
size_t lenp, total_length;
float *value;
int ndimsp;
if (argc < 4)
{
fprintf(stderr,"Usage: GetInfo reference_file_name VI_ID INFO_ID\n");
exit(0);
}
if ((status = nc_open(argv[1], NC_NOWRITE, &DataID)) != NC_NOERR)
nc_handle_error(status);
sscanf(argv[2], "%[^:]%*c%[^:]%*c%[^:]%*c",Project,
Instrument,
Mode);
memset(RInstrName, 0, 200*sizeof(char));
sprintf(RInstrName,"%s_%s_%s",Project,Instrument,Mode);
memset(INFO_ID, 0, 50*sizeof(char));
sprintf(INFO_ID,"%s",argv[3]);
if ((status = nc_inq_varid(DataID,RInstrName,&VarID)) != NC_NOERR)
nc_handle_error(status);
start[0] = 2;
if((status = nc_get_vara_text(DataID, VarID, start, countVar, Var)) != NC_NOERR)
nc_handle_error(status);
len = strcspn(Var," "); Var[len] = '\0';
if ((status = nc_close(DataID)) != NC_NOERR) nc_handle_error(status);
// Open VI_info.nc
if ((status = nc_open(Var, NC_NOWRITE, &DataID)) != NC_NOERR)
nc_handle_error(status);
// Get Number of Records
if ((status = nc_inq_varid(DataID, INFO_ID, &infoID)) != NC_NOERR)
nc_handle_error(status);
if ((status = nc_inq_varndims(DataID, infoID, &ndimsp)) != NC_NOERR)
nc_handle_error(status);
if ((status = nc_inq_vardimid(DataID, infoID, dims)) != NC_NOERR)
nc_handle_error(status);
total_length = 0;
for ( i = 0; i < ndimsp; i++) {
if ((status = nc_inq_dimlen (DataID, dims[i], &lenp))!= NC_NOERR)
nc_handle_error(status);
total_length += lenp;
}
value = malloc(total_length*sizeof(float));
if ((status =nc_get_var_float(DataID, infoID, value)) != NC_NOERR)
nc_handle_error(status);
printf("%f", value[0]);
for (i = 1; i < lenp; i++) printf(";%f", value[i]);
if ((status = nc_close(DataID)) != NC_NOERR) nc_handle_error(status);
}