1/* This is part of the netCDF package. Copyright 2005 University
2   Corporation for Atmospheric Research/Unidata See COPYRIGHT file for
3   conditions of use. See www.unidata.ucar.edu for more info.
4
5   Create a test file with a string data for ncdump to read.
6
7   $Id: tst_string_data.c,v 1.7 2009/01/28 18:19:48 russ Exp $
8*/
9
10#include <nc_tests.h>
11#include "err_macros.h"
12#include <netcdf.h>
13
14#define FILE4_NAME "tst_string_data.nc"
15#define DIM4_NAME "line"
16#define DIM4_LEN 5
17#define VAR4_NAME "description"
18#define VAR4_RANK 1
19#define ATT4_NAME "_FillValue"
20#define ATT4_LEN  1
21
22int
23main(int argc, char **argv)
24{
25   int ncid;
26   int dimidvarid;
27   nc_type att_type;
28   size_t att_len;
29
30   int i;
31
32   int var_dims[VAR4_RANK];
33   const char *desc_data[DIM4_LEN] = {
34       "first string", "second string", "third string", "", "last \n\"string\""
35   };
36   const char *missing_val[ATT4_LEN] = {""};
37   char *strings_in[DIM4_LEN];
38
39   printf("\n*** Testing strings.\n");
40   printf("*** creating strings test file %s...", FILE4_NAME);
41   if (nc_create(FILE4_NAMENC_CLOBBER | NC_NETCDF4, &ncid)) ERR;
42
43   /* Declare a line dimension */
44   if (nc_def_dim(ncidDIM4_NAMEDIM4_LEN, &dimid)) ERR;
45
46   /* Declare a string variable */
47   var_dims[0] = dimid;
48   if (nc_def_var(ncidVAR4_NAMENC_STRINGVAR4_RANKvar_dims, &varid)) ERR;
49
50   /* Create and write a variable attribute of string type */
51   if (nc_put_att_string(ncidvaridATT4_NAMEATT4_LENmissing_val)) ERR;
52   if (nc_enddef(ncid)) ERR;
53
54   /* Store some data of string type */
55   if(nc_put_var(ncidvariddesc_data)) ERR;
56
57   /* Write the file. */
58   if (nc_close(ncid)) ERR;
59
60   /* Check it out. */
61   if (nc_open(FILE4_NAMENC_NOWRITE, &ncid)) ERR;
62   if (nc_inq_varid(ncidVAR4_NAME, &varid)) ERR;
63   if (nc_inq_att(ncidvaridATT4_NAME, &att_type, &att_len)) ERR;
64   if (att_type != NC_STRING || att_len != ATT4_LENERR;
65   if (nc_get_att_string(ncidvaridATT4_NAMEstrings_in)) ERR;
66
67   if (strcmp(strings_in[0], *missing_val) != 0) ERR;
68   /* string atts should be explicitly freed when done with them */
69   nc_free_string(ATT4_LENstrings_in);
70
71   if(nc_get_var_string(ncidvaridstrings_in)) ERR;
72   for (i = 0; i < DIM4_LENi++) {
73       if (strcmp(strings_in[i], desc_data[i]) != 0) ERR;
74   }
75   nc_free_string(DIM4_LENstrings_in);
76
77   /* Try reading strings in with typeless generic interface also */
78   if(nc_get_var(ncidvaridstrings_in)) ERR;
79
80   for (i = 0; i < DIM4_LENi++) {
81       if (strcmp(strings_in[i], desc_data[i]) != 0) ERR;
82   }
83   nc_free_string(DIM4_LENstrings_in);
84
85
86   /* Try reading strings in with typeless generic array interface also */
87   {
88       size_t cor[VAR4_RANK], edg[VAR4_RANK];
89       cor[0] = 0;
90       edg[0] = DIM4_LEN;
91       if(nc_get_vara(ncidvaridcoredgstrings_in)) ERR;
92
93       for (i = 0; i < DIM4_LENi++) {
94    if (strcmp(strings_in[i], desc_data[i]) != 0) ERR;
95       }
96       nc_free_string(DIM4_LENstrings_in);
97   }
98
99   if (nc_close(ncid)) ERR;
100
101   SUMMARIZE_ERR;
102   FINAL_RESULTS;
103}


HyperKWIC - Version 7.20DA executed at 11:37 on 27 Oct 2017 | Polyhedron Solutions - INTERNAL USE | COMMERCIAL (Any O/S) SN 4AKIed