我和你说,现在的会计真的不好做,多才多艺是必须的。最近在学习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来处理,如果你有代码的话,请发我一分。