Daily_QC
read_zlevel_a.c
Go to the documentation of this file.
1 #include "prototypes_new.h"
2 
3 int read_zlevel_a(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 
23  fr=fopen(fname,"r");
24  zdata[i].data_time=tget;
25 
26  gm=gmtime(&tget);
27 
28  zdata[i].ztime=(gm->tm_year+1900)*10000+(gm->tm_mon+1)*100+gm->tm_mday;
29 
30  for(j=0;j<5;j++)
31  number_found[j]=0;
32 
33  for(k=0;k<max_zstations;k++) {
34 
35  for(m=0;m<5;m++) {
36 
37  zdata[i].stn[k].zlevel1[m].data=-1;
38  zdata[i].stn[k].zlevel1[m].qual=-1;
39 
40  }
41 
42  }
43 
44 if(fr==NULL) {
45 
46  for(k=0;k<5;k++) {
47 
48  zdata[i].used[k]=0;
49  zdata[i].level[k]=0;
50 
51  }
52 
53  return(-1);
54 
55  }
56 
57  for(k=0;k<5;k++) {
58 
59  zdata[i].used[k]=1;
60  zdata[i].level[k]=1;
61 
62  }
63 
64 /* initialize structure */
65 
66  for(;;) {
67 
68  bad:
69  p=fgets(kbuf,100,fr);
70  if(p==NULL)
71  break;
72 
73  if(kbuf[0]==':')
74  continue;
75 
76  ier=sscanf(&kbuf[2],"%s %s %s",hb5,datbuf,parmbuf);
77  if(ier==0)
78  continue;
79 
80  p=strchr(parmbuf,'/');
81  if(p==NULL)
82  continue;
83 
84  pc=*(p+5);
85 
86  for(j=0;j<max_zstations;j++) {
87 
88  if(strcmp(hb5,zstation[j].hb5)==0 &&
89  pc==zstation[j].parm[4]) {
90 
91  break;
92 
93  }
94 
95  }
96 
97  if(j==max_zstations) {
98 
99  continue;
100 
101  }
102 
103  q=kbuf;
104  for(k=0;k<3;k++) {
105 
106  p=strchr(q,'/');
107  if(p==NULL)
108  break;
109 
110  q=p+1;
111 
112  }
113 
114  if(k!=3)
115  continue; /* missing */
116 
117  maxk=4;
118  startk=0;
119 
120  for(k=startk;k<maxk;k++) {
121 
122  zdata[i].stn[j].zlevel1[k].qual=0;
123 
124  if((p=strchr(q,'/'))==NULL &&
125  (p=strchr(q,'\n'))==NULL)
126  goto bad;
127 
128  *p=0;
129 
130  strcpy(buf,q);
131 
132  if((p=strchr(buf,'.'))==NULL) {
133 
134  zdata[i].stn[j].zlevel1[k].data=-1;
135  zdata[i].stn[j].zlevel1[k].qual=-1;
136 
137  }
138 
139  else {
140 
141  number_found[k]++;
142 
143  zdata[i].stn[j].zlevel1[k].data=atof(buf);
144 
145  r=p+2;
146  qual=8;
147  while(*r != 0) {
148 
149  if(*r != ' '){
150 
151  if(*r=='S')
152  qual=8;
153 
154  zdata[i].stn[j].zlevel1[k].qual=qual;
155 
156  break;
157 
158  }
159 
160  else
161  r++;
162 
163  }
164 
165 
166  }
167 
168  p=strchr(q,0);
169  q=p+1;
170 
171  }
172 
173  }
174 
175 
176 fclose(fr);
177 
178 for(j=0;j<4;j++) {
179 
180  if(number_found[j] == 0)
181  zdata[i].used[j]=0;
182 
183  }
184 
185 
186 return(1);
187 
188 }
189 
190 
191 
192 
193 
194 
195 
196 
197 
198 
199 
200 
201 
202 
203 
204 
205 
206 
207 
208 
209 
210 
211 
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_a(char *fname, time_t tget, int i)
Definition: read_zlevel_a.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
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 * zlevel1
Definition: misc_new.h:393