From e2fc2f1bc9b03723c9f959de24b7de1405d5bf85 Mon Sep 17 00:00:00 2001 From: dudaodong Date: Thu, 8 Jun 2023 14:40:37 +0800 Subject: [PATCH] feat: add WirteCsvFile --- docs/fileutil.md | 38 +++++++++++++++++++++++++++++++++++ docs/fileutil_zh-CN.md | 38 +++++++++++++++++++++++++++++++++++ fileutil/file.go | 22 ++++++++++++++++++++ fileutil/file_example_test.go | 18 ++++++++++++++++- fileutil/file_test.go | 25 ++++++++++++++++++++++- fileutil/testdata/test.csv | 3 --- 6 files changed, 139 insertions(+), 5 deletions(-) delete mode 100644 fileutil/testdata/test.csv diff --git a/docs/fileutil.md b/docs/fileutil.md index a9cc1c9..749afc6 100644 --- a/docs/fileutil.md +++ b/docs/fileutil.md @@ -43,6 +43,7 @@ import ( - [MTime](#MTime) - [Sha](#Sha) - [ReadCsvFile](#ReadCsvFile) +- [WriteCsvFile](#WriteCsvFile) - [WriteStringToFile](#WriteStringToFile) - [WriteBytesToFile](#WriteBytesToFile) @@ -663,6 +664,43 @@ func main() { } ``` +### WriteCsvFile + +

Write content to target csv file.

+ +Signature: + +```go +func WriteCsvFile(filepath string, records [][]string, append bool) error +``` + +Example: + +```go +package main + +import ( + "fmt" + "github.com/duke-git/lancet/v2/fileutil" +) + +func main() { + data := [][]string{ + {"Lili", "22", "female"}, + {"Jim", "21", "male"}, + } + err := WriteCsvFile("./testdata/test2.csv", data, false) + fmt.Println(err) + + content, _ := ReadCsvFile("./testdata/test2.csv") + fmt.Println(content) + + // Output: + // + // [[Lili 22 female] [Jim 21 male]] +} +``` + ### WriteBytesToFile

Writes bytes to target file.

diff --git a/docs/fileutil_zh-CN.md b/docs/fileutil_zh-CN.md index d9facdf..73e22c7 100644 --- a/docs/fileutil_zh-CN.md +++ b/docs/fileutil_zh-CN.md @@ -43,6 +43,7 @@ import ( - [MTime](#MTime) - [Sha](#Sha) - [ReadCsvFile](#ReadCsvFile) +- [WirteCsvFile](#WirteCsvFile) - [WriteStringToFile](#WriteStringToFile) - [WriteBytesToFile](#WriteBytesToFile) @@ -663,6 +664,43 @@ func main() { } ``` +### WriteCsvFile + +

向csv文件写入内容。

+ +函数签名: + +```go +func WriteCsvFile(filepath string, records [][]string, append bool) error +``` + +示例: + +```go +package main + +import ( + "fmt" + "github.com/duke-git/lancet/v2/fileutil" +) + +func main() { + data := [][]string{ + {"Lili", "22", "female"}, + {"Jim", "21", "male"}, + } + err := WriteCsvFile("./testdata/test2.csv", data, false) + fmt.Println(err) + + content, _ := ReadCsvFile("./testdata/test2.csv") + fmt.Println(content) + + // Output: + // + // [[Lili 22 female] [Jim 21 male]] +} +``` + ### WriteBytesToFile diff --git a/fileutil/file.go b/fileutil/file.go index ceea46d..db6fa6f 100644 --- a/fileutil/file.go +++ b/fileutil/file.go @@ -454,6 +454,28 @@ func ReadCsvFile(filepath string) ([][]string, error) { return records, nil } +// WriteCsvFile write content to target csv file. +// Play: todo +func WriteCsvFile(filepath string, records [][]string, append bool) error { + flag := os.O_RDWR | os.O_CREATE + + if append { + flag = flag | os.O_APPEND + } + + f, err := os.OpenFile(filepath, flag, 0644) + if err != nil { + return err + } + + defer f.Close() + + writer := csv.NewWriter(f) + writer.Comma = ',' + + return writer.WriteAll(records) +} + // WriteStringToFile write string to target file. // Play: https://go.dev/play/p/GhLS6d8lH_g func WriteStringToFile(filepath string, content string, append bool) error { diff --git a/fileutil/file_example_test.go b/fileutil/file_example_test.go index 6d7e147..79e30bf 100644 --- a/fileutil/file_example_test.go +++ b/fileutil/file_example_test.go @@ -276,7 +276,7 @@ func ExampleSha() { } func ExampleReadCsvFile() { - content, err := ReadCsvFile("./testdata/test.csv") + content, err := ReadCsvFile("./testdata/demo.csv") fmt.Println(content) fmt.Println(err) @@ -286,6 +286,22 @@ func ExampleReadCsvFile() { // } +func ExampleWriteCsvFile() { + data := [][]string{ + {"Lili", "22", "female"}, + {"Jim", "21", "male"}, + } + err := WriteCsvFile("./testdata/test2.csv", data, false) + fmt.Println(err) + + content, _ := ReadCsvFile("./testdata/test2.csv") + fmt.Println(content) + + // Output: + // + // [[Lili 22 female] [Jim 21 male]] +} + func ExampleWriteStringToFile() { filepath := "./test.txt" diff --git a/fileutil/file_test.go b/fileutil/file_test.go index acdec64..6f64f09 100644 --- a/fileutil/file_test.go +++ b/fileutil/file_test.go @@ -288,7 +288,7 @@ func TestSha(t *testing.T) { func TestReadCsvFile(t *testing.T) { assert := internal.NewAssert(t, "TestReadCsvFile") - content, err := ReadCsvFile("./testdata/test.csv") + content, err := ReadCsvFile("./testdata/demo.csv") assert.IsNil(err) @@ -297,6 +297,29 @@ func TestReadCsvFile(t *testing.T) { assert.Equal("Bob", content[0][0]) } +func TestWriteCsvFile(t *testing.T) { + assert := internal.NewAssert(t, "TestWriteCsvFile") + + csvFilePath := "./testdata/test1.csv" + content := [][]string{ + {"Lili", "22", "female"}, + {"Jim", "21", "male"}, + } + + err := WriteCsvFile(csvFilePath, content, false) + assert.IsNil(err) + + readContent, err := ReadCsvFile(csvFilePath) + + assert.IsNil(err) + + assert.Equal(2, len(readContent)) + assert.Equal(3, len(readContent[0])) + assert.Equal("Lili", content[0][0]) + + // RemoveFile(csvFilePath) +} + func TestWriteStringToFile(t *testing.T) { assert := internal.NewAssert(t, "TestWriteStringToFile") diff --git a/fileutil/testdata/test.csv b/fileutil/testdata/test.csv deleted file mode 100644 index 191054c..0000000 --- a/fileutil/testdata/test.csv +++ /dev/null @@ -1,3 +0,0 @@ -Bob, 12, male -Duke, 14, male -Lucy, 16, female \ No newline at end of file