github.com/benoitkugler/goacve@v0.0.0-20201217100549-151ce6e55dc8/server/core/utils/table/csv.go (about) 1 package table 2 3 import ( 4 "encoding/csv" 5 "fmt" 6 "io" 7 "os" 8 "path/filepath" 9 10 rd "github.com/benoitkugler/goACVE/server/core/rawdata" 11 ) 12 13 // GenerateCsv génère un .csv et écrit dans `out` 14 func GenerateCsv(headers []rd.Header, liste rd.Table, out io.Writer) error { 15 data := make([][]string, len(liste)) 16 for i, item := range liste { 17 row := make([]string, len(headers)) 18 for j, header := range headers { 19 row[j] = item.Fields.Data(header.Field).String() 20 } 21 data[i] = row 22 } 23 writer := csv.NewWriter(out) 24 err := writer.WriteAll(data) 25 if err != nil { 26 return fmt.Errorf("Erreur pendant l'écriture de l'export CSV : %s", err) 27 } 28 return nil 29 } 30 31 // ExportCsv génère et enregistre un .csv à partir de la liste et des champs fournis 32 func ExportCsv(headers []rd.Header, liste rd.Table, directory string) (path string, err error) { 33 path, err = filepath.Abs(filepath.Join(directory, "export.csv")) 34 if err != nil { 35 return "", fmt.Errorf("Chemin du dossier invalide: %s", err) 36 } 37 f, err := os.Create(path) 38 if err != nil { 39 return "", fmt.Errorf("Création du fichier d'export impossible : %s", err) 40 } 41 defer f.Close() 42 43 if err = GenerateCsv(headers, liste, f); err != nil { 44 return "", err 45 } 46 return path, nil 47 }