代码拉取完成,页面将自动刷新
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,
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。