1 Star 0 Fork 0

jackytse / tabtoy

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
fileloader.go 1.80 KB
一键复制 编辑 原始数据 按行查看 历史
黑色灵猫 提交于 2019-05-05 09:25 . 修正错误提交
package helper
import (
"errors"
"github.com/davyxu/tabtoy/v3/report"
"path/filepath"
"sync"
)
type FileGetter interface {
GetFile(filename string) (TableFile, error)
}
type FileLoader struct {
fileByName sync.Map
inputFile []string
syncLoad bool
UseGBKCSV bool
}
func (self *FileLoader) AddFile(filename string) {
self.inputFile = append(self.inputFile, filename)
}
func (self *FileLoader) Commit() {
var task sync.WaitGroup
task.Add(len(self.inputFile))
for _, inputFileName := range self.inputFile {
go func(fileName string) {
self.fileByName.Store(fileName, loadFileByExt(fileName, self.UseGBKCSV))
task.Done()
}(inputFileName)
}
task.Wait()
self.inputFile = self.inputFile[0:0]
}
func loadFileByExt(filename string, useGBKCSV bool) interface{} {
var tabFile TableFile
switch filepath.Ext(filename) {
case ".xlsx", ".xls", ".xlsm":
tabFile = NewXlsxFile()
err := tabFile.Load(filename)
if err != nil {
return err
}
case ".csv":
tabFile = NewCSVFile()
err := tabFile.Load(filename)
if err != nil {
return err
}
// 输入gbk, 内部utf8
if useGBKCSV {
tabFile.(*CSVFile).Transform(ConvGBKToUTF8)
}
default:
report.ReportError("UnknownInputFileExtension", filename)
}
return tabFile
}
func (self *FileLoader) GetFile(filename string) (TableFile, error) {
if self.syncLoad {
result := loadFileByExt(filename, self.UseGBKCSV)
if err, ok := result.(error); ok {
return nil, err
}
return result.(TableFile), nil
} else {
if result, ok := self.fileByName.Load(filename); ok {
if err, ok := result.(error); ok {
return nil, err
}
return result.(TableFile), nil
} else {
return nil, errors.New("not found")
}
}
}
func NewFileLoader(syncLoad bool) *FileLoader {
return &FileLoader{
syncLoad: syncLoad,
}
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/jackytse/tabtoy.git
git@gitee.com:jackytse/tabtoy.git
jackytse
tabtoy
tabtoy
v0.0.1

搜索帮助

344bd9b3 5694891 D2dac590 5694891