go语言导入文件(固定长解析)(一)
2014-03-12 19:59
531 查看
// 这里 要注意 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"])
//把取到的值插入数据库
}
}
}
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"])
//把取到的值插入数据库
}
}
}
相关文章推荐
- go语言导入文件(固定长解析)(二) 增加读取json配置文件
- Go语言配置文件解析器,类似于Windows下的INI文件.
- 在Go语言程序中使用gojson来解析JSON格式文件
- C/C++ 语言中.h文件和.c文件详细解析 引用 .c和.h文件的区别
- GO语言实现文件上传
- Go语言文件操作的方法
- 解析MYSQL 数据库导入SQL 文件出现乱码的问题
- java解析vcf格式文件导入导出
- Go语言学习资料下载(PDF文件)
- go语言net/http包解析http body之坑
- go语言文件读写
- 批量导入(单文件的文件上传 + 解析上传的csv文件 ,导入至数据库 ,反馈信息)
- go语言中flag的用法——参数解析
- Xamarin XAML语言教程XAML文件结构与解析XAML
- C#中csv文件与DataTable互相导入处理实例解析
- Go语言解析Html
- PE总结11--PE文件结构之 解析导入表
- 解析PHP SPL标准库的用法(遍历目录,查找固定条件的文件)
- Linux ELF格式文件解析之relocation和entry入口点,基于gas汇编语言视角
- C#语言的Excel文件导入导出