14 func handleError(err error) error {
21 func readCsvLine(fileName string) (int, error) {
22 file, err := os.Open(fileName)
27 rd := csv.NewReader(file)
28 rc, err := rd.ReadAll()
31 func readCsvIsEmpty(fileName string) (string, error) {
32 file, err := os.Open(fileName)
39 var indexYear, indexStateAbbr, indexCityName, indexPopulationCount int
41 rd := bufio.NewReader(file)
43 line, err := rd.ReadString('\n') // read a line
51 sptLint := strings.Split(line, ",")
54 for _, val := range sptLint {
59 indexStateAbbr = index
62 case "PopulationCount":
63 indexPopulationCount = index
68 if sptLint[indexCityName] != "" {
69 outLine := sptLint[indexYear] + "," + sptLint[indexStateAbbr] + "," + sptLint[indexCityName] + "," + sptLint[indexPopulationCount] + "\n"
78 func readCsvLike(fileName string) (string, error) {
79 file, err := os.Open(fileName)
86 var indexYear,indexStateAbbr,indexCityName,indexPopulationCount,indexMeasure int
88 rd := bufio.NewReader(file)
90 line, err := rd.ReadString('\n') // read a line
98 //utf8Lint := ConvertToString(line,"gbk", "utf-8")
99 sptLint := strings.Split(line[:(len(line)-1)], ",")
102 for _, val := range sptLint {
104 case "Year":indexYear = index
105 case "StateAbbr":indexStateAbbr = index
106 case "CityName":indexCityName = index
107 case "Short_Question_Text":indexPopulationCount = index
108 case "Measure":indexMeasure = index
113 if sptLint[indexMeasure] != "" {
114 reg := regexp.MustCompile("^.*blood pressure.*Years$")
115 res := reg.FindAllString(sptLint[indexMeasure], -1)
117 outLine := sptLint[indexYear] + "," +sptLint[indexStateAbbr] + "," +sptLint[indexCityName] + "," + sptLint[indexPopulationCount] + "\n"
127 func readCsvRange(fileName string, l int, r int) (string, error) {
128 file, err := os.Open(fileName)
135 var indexYear,indexStateAbbr,indexCityName,indexPopulationCount int
137 rd := bufio.NewReader(file)
138 for j := 0; j < r + 1; j++ {
142 line, err := rd.ReadString('\n') // read a line
150 sptLint := strings.Split(line[:(len(line)-1)], ",")
153 for _, val := range sptLint {
155 case "Year":indexYear = index
156 case "StateAbbr":indexStateAbbr = index
157 case "CityName":indexCityName = index
158 case "Short_Question_Text":indexPopulationCount = index
163 outLine := sptLint[indexYear] + "," +sptLint[indexStateAbbr] + "," +sptLint[indexCityName] + "," + sptLint[indexPopulationCount] + "\n"
171 func readCsvFloatAgg(fileName string) (avg, max, sum float64, er error) {
172 file, err := os.Open(fileName)
179 var indexDataValue int
181 rd := csv.NewReader(file)
194 for index = 0; index < len(rc); index++ {
195 if rc[index] == "Data_Value" {
196 indexDataValue = index
200 if rc[indexDataValue] != "" {
201 s1, err := strconv.ParseFloat(rc[indexDataValue], 64)
214 avg = sum / float64(i-1)
217 func readCsvConcat(fileName string) (string, error) {
219 file, err := os.Open(fileName)
225 var indexDataValue int
226 var indexYear,indexStateAbbr,indexCityName,indexShortQuestionText, indexDataValueUnit int
228 rd := csv.NewReader(file)
239 for j, v := range rc {
241 case "Year":indexYear = j
242 case "StateAbbr":indexStateAbbr = j
243 case "CityName":indexCityName = j
244 case "Short_Question_Text":indexShortQuestionText = j
245 case "Data_Value_Unit":indexDataValueUnit = j
246 case "Data_Value":indexDataValue = j
251 if rc[indexDataValue] != "" || rc[indexDataValueUnit] != "" {
252 reg := regexp.MustCompile("^14.8.*$")
253 reD := reg.FindAllString(rc[indexDataValue], -1)
254 reDU := reg.FindAllString(rc[indexDataValueUnit], -1)
255 if len(reD) > 0 || len(reDU) > 0 {
256 outLine := rc[indexYear] + "," +rc[indexStateAbbr] + "," +rc[indexCityName] + "," + rc[indexShortQuestionText] + "\n"
265 func readCsvComplicateCondition(fileName string)(string, error) {
267 file, err := os.Open(fileName)
273 var indexDataValue, indexCategory, indexHighConfidenceLimit, indexMeasure int
274 var indexYear,indexStateAbbr,indexCityName,indexShortQuestionText, indexDataValueUnit int
276 rd := csv.NewReader(file)
287 for j, v := range rc {
289 case "Year":indexYear = j
290 case "StateAbbr":indexStateAbbr = j
291 case "CityName":indexCityName = j
292 case "Short_Question_Text":indexShortQuestionText = j
293 case "Data_Value_Unit":indexDataValueUnit = j
294 case "Data_Value":indexDataValue = j
295 case "Measure":indexMeasure = j
296 case "Category":indexCategory = j
297 case "High_Confidence_Limit":indexHighConfidenceLimit = j
301 reg := regexp.MustCompile("^.*18 Years$")
302 reM := reg.FindAllString(rc[indexMeasure], -1)
303 var dataV, limitV float64
304 if rc[indexDataValue] != "" {
305 dataV, err = strconv.ParseFloat(rc[indexDataValue], 64)
310 if rc[indexHighConfidenceLimit] != "" {
311 limitV, err = strconv.ParseFloat(rc[indexHighConfidenceLimit], 64)
316 if dataV > 14.8 && rc[indexDataValueUnit] == "%" || len(reM) > 0 &&
317 rc[indexCategory] == "Unhealthy Behaviors" || limitV > 70.0 {
318 outLine := rc[indexYear] + "," +rc[indexStateAbbr] + "," +rc[indexCityName] + "," + rc[indexShortQuestionText] + "," + rc[indexDataValue] + "," + rc[indexDataValueUnit] + "," + rc[indexCategory] + "," + rc[indexHighConfidenceLimit] + "\n"
329 Address string `json:"address"`
330 ContactForm string `json:"contact_form"`
331 Fax string `json:"fax,omitempty"`
332 How string `json:"how,omitempty"`
333 Office string `json:"office"`
334 RssUrl string `json:"rss_url,omitempty"`
338 Bioguideid string `json:"bioguideid"`
339 Birthday string `json:"birthday"`
340 Cspanid int `json:"cspanid"`
341 Firstname string `json:"firstname"`
342 Gender string `json:"gender"`
343 GenderLabel string `json:"gender_label"`
344 Lastname string `json:"lastname"`
345 Link string `json:"link"`
346 Middlename string `json:"middlename"`
347 Name string `json:"name"`
348 Namemod string `json:"namemod"`
349 Nickname string `json:"nickname"`
350 Osid string `json:"osid"`
351 Pvsid *string `json:"pvsid"`
352 Sortname string `json:"sortname"`
353 Twitterid *string `json:"twitterid"`
354 Youtubeid *string `json:"youtubeid"`
357 type JsonLineSt struct {
358 Caucus *string `json:"caucus"`
359 CongressNumbers []int `json:"congress_numbers"`
360 Current bool `json:"current"`
361 Description string `json:"description"`
362 District *string `json:"district"`
363 Enddate string `json:"enddate"`
364 Extra Extra `json:"extra"`
365 LeadershipTitle *string `json:"leadership_title"`
366 Party string `json:"party"`
367 Person Person `json:"person"`
368 Phone string `json:"phone"`
369 RoleType string `json:"role_type"`
370 RoleTypeLabel string `json:"role_type_label"`
371 SenatorClass string `json:"senator_class"`
372 SenatorClassLabel string `json:"senator_class_label"`
373 SenatorRank string `json:"senator_rank"`
374 SenatorRankLabel string `json:"senator_rank_label"`
375 Startdate string `json:"startdate"`
376 State string `json:"state"`
377 Title string `json:"title"`
378 TitleLong string `json:"title_long"`
379 Website string `json:"website"`
389 Objects []JsonLineSt `json:"objects"`
392 func readJsonDocument(fileName string) (string, error){
395 file, err := os.Open(fileName)
399 decoder := json.NewDecoder(file)
400 err = decoder.Decode(&data)
401 for _, v := range data.Objects {
402 if v.Party == "Democrat"{
403 lint, err := json.Marshal(v)
407 lints := strings.Replace(string(lint), "\\u0026", "&", -1)
414 func readJsonLinesLike(fileName string) (string, error){
417 file, err := os.Open(fileName)
421 decoder := json.NewDecoder(file)
422 err = decoder.Decode(&data)
423 reg := regexp.MustCompile("^1959.*")
424 for _, v := range data.Objects {
425 reB := reg.FindAllString(v.Person.Birthday, -1)
427 lints := "{\"firstname\":\"" + v.Person.Firstname + "\",\"lastname\":\"" + v.Person.Lastname + "\"}"
435 func readJsonLinesRange(fileName string, l, r int) (string, error){
439 file, err := os.Open(fileName)
443 decoder := json.NewDecoder(file)
444 err = decoder.Decode(&data)
445 for _, v := range data.Objects {
452 extrb, err := json.Marshal(v.Extra)
456 extr := strings.Replace(string(extrb), "\\u0026", "&", -1)
458 lints := "{\"firstname\":\"" + v.Person.Firstname + "\",\"lastname\":\"" + v.Person.Lastname +
459 "\",\"extra\":" + extr + "}"
467 func readJsonFloatAggregation(fileName string) (float64, float64, float64, error){
468 var avg, max, min, sum float64
471 file, err := os.Open(fileName)
473 return avg, max, min, err
475 decoder := json.NewDecoder(file)
476 err = decoder.Decode(&data)
477 for _, v := range data.Objects {
479 min = float64(v.Person.Cspanid)
481 if max < float64(v.Person.Cspanid) {
482 max = float64(v.Person.Cspanid)
484 if min > float64(v.Person.Cspanid) {
485 min = float64(v.Person.Cspanid)
487 sum += float64(v.Person.Cspanid)
490 avg = sum / float64(i)
491 return avg, max, min, err
494 func readJsonDocumentConcat(fileName string) (string, error){
497 file, err := os.Open(fileName)
501 decoder := json.NewDecoder(file)
502 err = decoder.Decode(&data)
504 for _, v := range data.Objects {
505 if v.Person.Firstname + v.Person.Lastname == "JohnKennedy" {
506 extrb, err := json.Marshal(v.Person)
510 extr := "{\"person\":" + strings.Replace(string(extrb), "\\u0026", "&", -1) + "}"
518 func readJsonComplicateConcat(fileName string) (string, error){
521 file, err := os.Open(fileName)
525 decoder := json.NewDecoder(file)
526 err = decoder.Decode(&data)
528 for _, v := range data.Objects {
529 if v.Startdate > "2017-01-01" && v.SenatorRank == "junior" ||
530 v.State == "CA" && v.Party == "Repulican" {
532 for _,vv := range v.CongressNumbers {
533 cn += strconv.Itoa(vv) + ","
535 cn = cn[:len(cn)-1] + "]"
536 lints := "{\"firstname\":\"" + v.Person.Firstname + "\",\"lastname\":\"" + v.Person.Lastname + "\",\"congress_numbers\":" + cn + "}"