磊语

Golang笔记:读取CSV文件,并且生成自己需要的CSV数据

我和你说,现在的会计真的不好做,多才多艺是必须的。最近在学习Golang这门语言,大叔表示压力很大,零基础的我,决定用头发为代价多学一些东西。这段代码是今天研究的结果,数据还是很粗糙。主要解决是数据处理的问题。

问题:公司使用的Sage300,导出的CSV文件,里面有很多我不需要的数据。一般的做法是可以通过Excel,手动的删除不需要的数据,留下有用的数据。这时候我想,能不能通过Golang读取CSV文件,把手动删除的部分自动化呢?下面是我自己编写的数据。

package main

import (
	"encoding/csv"
	"fmt"
	"io"
	"os"
)

type Data struct {
	SON       string
	Customer  string
	Sodate    string
	Currency  string
	Shipdata  string
	Ponumber  string
	Itenumber string
	Orderqty  string
	shipqty   string
	Unitprice string
}

func main() {
	csvFile, _ := os.Open("OEORLST1.csv")
	reader := csv.NewReader(csvFile)
	var data []Data
	for {
		line, err := reader.Read()
		if err == io.EOF {
			break
		}
		data = append(data, Data{
			SON:       line[12],
			Customer:  line[13],
			Sodate:    line[14],
			Currency:  line[17],
			Shipdata:  line[29],
			Ponumber:  line[45],
			Itenumber: line[110],
			Orderqty:  line[113],
			shipqty:   line[114],
			Unitprice: line[117],
		})

	}
	File, err := os.Create("./data.csv")

	if err != nil {
		fmt.Println(err)
	}
	defer File.Close()
	writer := csv.NewWriter(File)

	for i := 0; i < len(data); i++ {
		var row []string
		row = append(row, data[i].SON)
		row = append(row, data[i].Customer)
		row = append(row, data[i].Sodate)
		row = append(row, data[i].Currency)
		row = append(row, data[i].Shipdata)
		row = append(row, data[i].Ponumber)
		row = append(row, data[i].Itenumber)
		row = append(row, data[i].Orderqty)
		row = append(row, data[i].shipqty)
		row = append(row, data[i].Unitprice)
		writer.Write(row)
	}
	fmt.Println("Finished")
	writer.Flush()

}

这里已经实现了基本的内容,首先读取了OEORLST1.csv这个文件,然后提取数据出来,通过slice的方式,写入到data.csv文件。这样子大概可以节省十来分钟来处理文件。如果你有更好的处理方式,可以给我留言。之后可能加入一些错误处理的方式。当然,你可以通过VBS来处理,如果你有代码的话,请发我一分。

Exit mobile version