gitee.com/quant1x/gox@v1.7.6/api/slices_csv.go (about)

     1  package api
     2  
     3  import (
     4  	"gitee.com/quant1x/gox/util/homedir"
     5  	"github.com/gocarina/gocsv"
     6  	"os"
     7  )
     8  
     9  const (
    10  	DefaultTagName = "dataframe"
    11  )
    12  
    13  func init() {
    14  	gocsv.TagName = DefaultTagName
    15  }
    16  
    17  // CsvToSlices CSV文件转struct切片
    18  func CsvToSlices[S ~[]E, E any](filename string, pointer *S) error {
    19  	filepath, err := homedir.Expand(filename)
    20  	if err != nil {
    21  		return err
    22  	}
    23  	csvFile, err := os.Open(filepath)
    24  	if err != nil {
    25  		return err
    26  	}
    27  	err = gocsv.Unmarshal(csvFile, pointer)
    28  	return err
    29  }
    30  
    31  // SlicesToCsv struct切片转csv文件
    32  func SlicesToCsv[S ~[]E, E any](filename string, s S) error {
    33  	filepath, err := homedir.Expand(filename)
    34  	if err != nil {
    35  		return err
    36  	}
    37  	// 检查目录, 不存在就创建
    38  	_ = CheckFilepath(filepath, true)
    39  	csvFile, err := os.Create(filepath)
    40  	if err != nil {
    41  		return err
    42  	}
    43  	defer CloseQuietly(csvFile)
    44  	err = gocsv.MarshalFile(s, csvFile)
    45  	return err
    46  }