Daily_QC
read_zlevel_b.c
Go to the documentation of this file.
1 #include "prototypes_new.h"
2 
3 int read_zlevel_b(char *fname,time_t tget,int i)
4 
5 {
6  extern struct dval dval;
7  extern struct zdata zdata[10];
8  extern struct station zstation[500];
9  extern int max_zstations;
10  FILE *fr;
11  int j,k,ier,m,qual,len,len2;
12  char kbuf[100],*p,*q,*r,buf[100],hb5[10];
13  long t,u;
14  float conv=.0174;
15  double lat,lon;
16  int number_found[5];
17  char parm[10];
18  int type;
19  char pc,datbuf[50],parmbuf[50];
20  int maxk,startk;
21  struct tm *gm;
22  int uflag[4];
23 
24  fr=fopen(fname,"r");
25  zdata[i].data_time=tget;
26 
27  gm=gmtime(&tget);
28 
29  zdata[i].ztime=(gm->tm_year+1900)*10000+(gm->tm_mon+1)*100+gm->tm_mday;
30 
31  for(j=0;j<4;j++) {
32 
33  number_found[j]=0;
34  uflag[j]=0;
35 
36  }
37 
38  for(k=0;k<max_zstations;k++) {
39 
40  for(m=0;m<5;m++) {
41 
42  zdata[i].stn[k].zlevel2[m].data=-1;
43  zdata[i].stn[k].zlevel2[m].qual=-1;
44 
45  }
46 
47  }
48 
49 if(fr==NULL) {
50 
51  for(k=0;k<max_zstations;k++) {
52 
53  for(m=0;m<4;m++) {
54 
55  zdata[i].stn[k].zlevel2[m].data=
56  zdata[i].stn[k].zlevel1[m].data;
57 
58  zdata[i].stn[k].zlevel2[m].qual=
59  zdata[i].stn[k].zlevel1[m].qual;
60 
61  if(zdata[i].stn[k].zlevel2[m].data>=0)
62  number_found[m]++;
63 
64 
65  }
66 
67  }
68 
69  for(m=0;m<4;m++) {
70 
71  if(number_found[m] == 0)
72  zdata[i].used[m]=0;
73 
74  zdata[i].level[m]=1;
75 
76  }
77 
78 
79  return(-1);
80 
81  }
82 
83  for(k=0;k<5;k++) {
84 
85  zdata[i].used[k]=1;
86  zdata[i].level[k]=2;
87 
88  }
89 
90 /* initialize structure */
91 
92  for(;;) {
93 
94  bad:
95  p=fgets(kbuf,100,fr);
96  if(p==NULL)
97  break;
98 
99  if(kbuf[0]==':')
100  continue;
101 
102  ier=sscanf(&kbuf[3],"%s %s %s",hb5,datbuf,parmbuf);
103  if(ier==0)
104  continue;
105 
106  p=strchr(parmbuf,'/');
107  if(p==NULL)
108  continue;
109 
110  pc=*(p+5);
111 
112  for(j=0;j<max_zstations;j++) {
113 
114  if(strcmp(hb5,zstation[j].hb5)==0 &&
115  pc==zstation[j].parm[4]) {
116 
117  break;
118 
119  }
120 
121  }
122 
123  if(j==max_zstations) {
124 
125  continue;
126 
127  }
128 
129  q=kbuf;
130  for(k=0;k<3;k++) {
131 
132  p=strchr(q,'/');
133  if(p==NULL)
134  break;
135 
136  q=p+1;
137 
138  }
139 
140  if(k!=3)
141  continue; /* missing */
142 
143  maxk=4;
144  startk=0;
145 
146  for(k=startk;k<maxk;k++) {
147 
148  zdata[i].stn[j].zlevel2[k].qual=0;
149 
150  if((p=strchr(q,'/'))==NULL &&
151  (p=strchr(q,'\n'))==NULL)
152  goto bad;
153 
154  *p=0;
155 
156  strcpy(buf,q);
157 
158  if((p=strchr(buf,'.'))==NULL) {
159 
160  uflag[k]=1;
161 
162 
163 
164  }
165 
166  else {
167 
168  number_found[k]++;
169 
170  zdata[i].stn[j].zlevel2[k].data=atof(buf);
171 
172  r=p+2;
173  qual=8;
174  while(*r != 0) {
175 
176  if(*r != ' '){
177 
178  if(*r=='S')
179  qual=8;
180 
181  else if(*r=='E')
182  qual=5;
183 
184  else if(*r=='W')
185  qual=2;
186 
187  else if(*r=='F')
188  qual=1;
189 
190  zdata[i].stn[j].zlevel2[k].qual=qual;
191 
192  if((qual == 8) &&
193  zdata[i].stn[j].zlevel2[k].data !=
194  zdata[i].stn[j].zlevel1[k].data) {
195 
196  uflag[k]=1;
197 
198 
199 
200  }
201 
202  break;
203 
204  }
205 
206  else
207  r++;
208 
209  }
210 
211 
212  }
213 
214  p=strchr(q,0);
215  q=p+1;
216 
217  }
218 
219  }
220 
221 
222 fclose(fr);
223 
224 for(m=0;m<4;m++) {
225 
226  if(uflag[m]==1) {
227 
228  number_found[m]=0;
229 
230  for(k=0;k<max_zstations;k++) {
231 
232  zdata[i].stn[k].zlevel2[m].data=
233  zdata[i].stn[k].zlevel1[m].data;
234 
235  zdata[i].stn[k].zlevel2[m].qual=
236  zdata[i].stn[k].zlevel1[m].qual;
237 
238  if(zdata[i].stn[k].zlevel2[m].data>=0)
239  number_found[m]++;
240 
241 
242  }
243 
244  zdata[i].level[m]=1;
245 
246 
247  }
248 
249 
250 }
251 
252 for(j=0;j<4;j++) {
253 
254  if(number_found[j] == 0) {
255 
256  zdata[i].used[j]=0;
257  zdata[i].level[j]=1;
258 
259  }
260 
261  }
262 
263 return(1);
264 
265 }
266 
267 
268 
269 
270 
271 
272 
273 
274 
275 
276 
277 
278 
279 
280 
281 
282 
283 
284 
285 
286 
287 
288 
char t
Definition: build_list.c:122
struct station zstation[500]
Definition: daily_qc.c:196
int max_zstations
Definition: daily_qc.c:45
char type[5]
Definition: daily_qc.c:98
char qual[10]
Definition: display_data.c:29
fr
Definition: jnk.c:17
int read_zlevel_b(char *fname, time_t tget, int i)
Definition: read_zlevel_b.c:3
Definition: misc.h:397
Definition: misc.h:232
float lat
Definition: misc.h:239
float lon
Definition: misc.h:240
char parm[10]
Definition: misc.h:237
char hb5[10]
Definition: misc.h:235
Definition: misc.h:200
int level[5]
Definition: misc_new.h:441
struct ztn stn[500]
Definition: misc_new.h:442
int ztime
Definition: misc_new.h:438
int used[5]
Definition: misc_new.h:439
time_t data_time
Definition: misc_new.h:437
short int qual
Definition: misc_new.h:358
float data
Definition: misc_new.h:357
struct zlevel * zlevel2
Definition: misc_new.h:394
struct zlevel * zlevel1
Definition: misc_new.h:393