CsvReader.go 1010 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package base
  2. import (
  3. "Server-Core/Server/Base/Log"
  4. "encoding/csv"
  5. "os"
  6. )
  7. type CsvTable struct {
  8. FileName string
  9. Records []CsvRecord
  10. Key string
  11. }
  12. type CsvRecord struct {
  13. Record map[string]string
  14. }
  15. func LoadCsvCfg(filename string) *CsvTable {
  16. file, err := os.Open(filename)
  17. if err != nil {
  18. log.Error("open csv fail")
  19. return nil
  20. }
  21. defer file.Close()
  22. reader := csv.NewReader(file)
  23. if reader == nil {
  24. log.Error("NewReader return nil, file")
  25. return nil
  26. }
  27. records, err := reader.ReadAll()
  28. if err != nil {
  29. log.Error("read csv fail")
  30. return nil
  31. }
  32. key := ""
  33. colNum := len(records[0])
  34. recordNum := len(records)
  35. var allRecords []CsvRecord
  36. for i := 0; i < recordNum; i++ {
  37. record := &CsvRecord{make(map[string]string)}
  38. for k := 0; k < colNum; k++ {
  39. record.Record[records[3][k]] = records[i][k]
  40. if key == "" {
  41. key = records[3][k]
  42. }
  43. }
  44. allRecords = append(allRecords, *record)
  45. }
  46. var result = &CsvTable{
  47. filename,
  48. allRecords,
  49. key,
  50. }
  51. return result
  52. }