分享
  1. 首页
  2. 文章

go语言导入文件(固定长解析)(一)

zistxym · · 3984 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

// 这里 要注意 make(map[string]interface{}, len(b)) 使用了空接口,可以存放任意类型

package main


import (
"bufio"
"fmt"
"io"
"math"
"os"
"strconv"
)

type rule struct {
itemname string //字段名
datatype string // 类型
length int // 长度
tail int // 小数点位数
chinesename string // 中文名字

}

func main() {

b := []rule{
{"l_serialno", "C", 2, 0, "序号"},
{"c_date", "C", 8, 0, "日期"},
{"c_fundname", "C", 12, 0, "基金名称"},
{"c_fundcode", "C", 6, 0, "基金代码"},
{"f_totalnetvalue", "F", 16, 2, "基金总净值"},
{"f_totalshares", "F", 16, 2, "基金总份额"},
{"f_netvalue", "F", 16, 4, "基金单位净值"},
{"f_income", "F", 16, 2, "基金收益"},
{"f_WFincome", "F", 9, 4, "万份基金收益"},
{"f_yearincome", "F", 9, 4, "年收益率"},
{"f_salefare", "F", 16, 2, "销售服务费"},
}

item := make(map[string]interface{}, len(b))

f, err := os.Open("nav20130104") //打开文件

//打开文件出错处理

defer f.Close()

if nil == err {

buff := bufio.NewReader(f) //读入缓存

for {

line, err := buff.ReadString('\n') //以'\n'为结束符读入一行

if err != nil || io.EOF == err {

break

}

for i, index := 0, 0; i < len(b); i++ {
if b[i].datatype == "F" {
tmp, err := strconv.ParseFloat(line[index:index+b[i].length], 10)
if err != nil {
fmt.Println("转换失败")
return
}
item[b[i].itemname] = tmp / math.Pow(10, float64(b[i].tail))
} else {
item[b[i].itemname] = line[index : index+b[i].length]
}
index += b[i].length
}

fmt.Println(item["c_fundcode"])
fmt.Printf("%16.2f\n", item["f_totalnetvalue"])

//把取到的值插入数据库
}
}
}

有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:zistxym

查看原文:go语言导入文件(固定长解析)(一)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
3984 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏