设为首页 收藏本站
查看: 1221|回复: 0

[经验分享] golang csv,xls,xlsx

[复制链接]

尚未签到

发表于 2018-9-20 09:28:57 | 显示全部楼层 |阅读模式
  要用到的包:
  "golang.org/x/text/encoding/simplifiedchinese"
  "golang.org/x/text/transform"
  func Decode(s []byte) ([]byte, error) {
  I := bytes.NewReader(s)
  O := transform.NewReader(I, simplifiedchinese.GBK.NewDecoder())
  d, e := ioutil.ReadAll(O)
  if e != nil {
  return nil, e
  }
  return d, nil
  }
  func ReadCsv(execlFileName string) {
  ProBar.Exist = 0
  ProBar.Sucess = 0
  ProBar.Fail = 0
  ProBar.Count = 0
  var (
  err        error
  sucess     int64
  fail       int64
  exist      int64
  errcontent string
  OrderTime  time.Time
  tradedata  []TradeData
  )
  cntb, err := ioutil.ReadFile(execlFileName)
  ress, err := Decode(cntb)
  if err != nil {
  beego.Error("change is err", err.Error())
  return
  }
  buffer := bytes.NewBuffer(ress)
  bufferline := bytes.NewBuffer(ress)
  var cols int
  for {
  s, err := bufferline.ReadString(byte('\n'))
  if err != nil {
  beego.Error("err", err)
  break
  } else {
  linestr := strings.Split(s, ",")
  if len(linestr) > 5 && len(linestr[1]) > 5 {
  cols++
  }
  }
  }
  ProBar.TotalPro = int64((cols - 1) * 3)
  var linenum int
  for {
  s, err := buffer.ReadString(byte('\n'))
  if err != nil {
  beego.Error("err", err)
  break
  } else {
  if linenum > 0 {
  linestr := strings.Split(s, ",")
  if len(linestr) > 5 && len(linestr[1]) > 5 {
  beego.Debug("linestr lenght:", len(linestr))
  var (
  trade TradeData
  )
  for i := 0; i < len(linestr); i++ {
  str := linestr
  if strings.TrimSpace(str) != "" {
  ProBar.CurrentPro++
  // for i := 0; i < len(str); i++ {
  if strings.TrimSpace(linestr) != "" {
  trimsrt := strings.TrimRight(strings.TrimLeft(linestr, `="`), `"`)
  beego.Debug("str : i", i, trimsrt)
  if i == 1 {
  customercode, _ := strconv.ParseFloat(trimsrt, 64) //客户账号
  trade.CustomerCode = int64(customercode)           //客户账号
  }
  if i == 2 {
  trade.CustomerName = trimsrt //账户名称
  }
  if i == 3 {
  trade.SuccessOrderCode = trimsrt //成交单号
  }
  if i == 4 {
  trade.CommodityCode = trimsrt //成交代码
  }
  if i == 5 {
  trade.CommodityName = trimsrt //商品名称
  }
  if i == 6 {
  switch trimsrt {
  case "买":
  trade.TradeType = 1 //交易类型(0-未知,1-买,2-卖)
  break
  case "卖":
  trade.TradeType = 2 //交易类型(0-未知,1-买,2-卖)
  break
  default:
  trade.TradeType = 0 //交易类型(0-未知,1-买,2-卖)
  if trade.TradeType == 0 {
  fail++
  beego.Debug("Transaction type error : ", linestr)
  errcontent = errcontent + strconv.Itoa(i) + "行买卖类型错误"
  break
  }
  }
  }
  if i == 7 {
  trade.OrderCode = trimsrt //委托单号
  }
  if i == 8 {
  trancount, _ := strconv.ParseFloat(trimsrt, 64) //成交数量
  trade.TranCount = int64(trancount)
  }
  if i == 9 {
  trade.TranPrice, _ = strconv.ParseFloat(trimsrt, 64) //成交价格
  }
  if i == 10 {
  trade.TranAmount, _ = strconv.ParseFloat(trimsrt, 64) //成交金额
  }
  if i == 11 {
  tranuser, _ := strconv.ParseFloat(trimsrt, 64) //交易员
  trade.TranUser = int64(tranuser)               //交易员
  }
  if i == 12 {
  loc, _ := time.LoadLocation("Local")                                             //重要:获取时区
  trade.TradeTime, err = time.ParseInLocation("2006-01-02 15:04:05", trimsrt, loc) //成交时间
  if err != nil {
  fail++
  beego.Debug("TradeTime wrong time : ", trimsrt)
  errcontent = errcontent + strconv.Itoa(i) + "行 时间格式错误"
  break
  }
  }
  if i == 13 {
  trade.ProfitLoss, _ = strconv.ParseFloat(trimsrt, 64) //转让盈亏
  }
  if i == 14 {
  trade.PoundAge, _ = strconv.ParseFloat(trimsrt, 64) //手续费
  }
  if i >= 15 && strings.TrimSpace(trimsrt) != "" {
  if i == 15 {
  trade.OrderPrice, _ = strconv.ParseFloat(trimsrt, 64) //订立价格
  }
  if i == 16 {
  loc, _ := time.LoadLocation("Local")
  OrderTime, err = time.ParseInLocation("2006-01-02 15:04:05", trimsrt, loc) //订立时间
  trade.OrderTime = OrderTime.Unix()
  if err != nil {
  fail++
  beego.Debug("TradeTime wrong time : ", trimsrt)
  errcontent = errcontent + strconv.Itoa(i) + "行 时间格式错误"
  break
  }
  }
  }
  }
  }
  }
  beego.Debug("trade", linenum, trade)
  checktime := trade.TradeTime.Format("2006-01-02") //登入的时间
  IsExist := CheckIsTradeData(checktime)
  if !IsExist {
  tradedata = append(tradedata, trade)
  sucess++
  } else {
  exist++
  beego.Debug("Database duplicate data : ", trade)
  errcontent = errcontent + strconv.Itoa(linenum) + "行 数据库重复"
  }
  }
  }
  time.Sleep(time.Millisecond * 0)
  }
  linenum++
  }
  if sucess > 0 {
  var commitfail int64
  sucess, commitfail = AddTradeData(tradedata, sucess)
  if commitfail > 0 {
  fail = 0
  sucess = 0
  commitfail = int64(cols - 1)
  }
  fail += commitfail
  os.Remove(execlFileName) //删除文件
  }
  ProBar.Sucess = sucess
  ProBar.Fail = fail
  ProBar.Exist = exist
  ProBar.Count = int64(cols - 1)
  ProBar.ErrorContent = errcontent
  ProBar.Status = false
  ProBar.CurrentPro = ProBar.TotalPro
  }
  func ReadXls(excelFileName string) (res [][]string) {
  xlFile, err := xls.Open(excelFileName, "utf-8")
  if err == nil {
  beego.Debug(excelFileName, " file data read...................")
  for i := 0; i < xlFile.NumSheets(); i++ {
  sheet := xlFile.GetSheet(i)
  temp := make([][]string, sheet.MaxRow+1)
  for k, row := range sheet.Rows {
  data := make([]string, 0)
  for _, col := range row.Cols {
  if uint16(len(data))

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-598662-1-1.html 上篇帖子: golang string转json的一些坑 下篇帖子: 关于协程:nodejs和golang协程的不同
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表