为了账号安全,请及时绑定邮箱和手机立即绑定

我在 Golang 中的程序在文件中两次打印第一个输入

我在 Golang 中的程序在文件中两次打印第一个输入

Go
阿波罗的战车 2023-03-21 10:26:58
我尝试获取一些 CSV 格式的字符串作为输入,然后将其打印到实际的 CSV 文件中。它有效,但它打印第一个字符串 2 次。我的代码如下所示:func main() {    scanner := bufio.NewScanner(os.Stdin)    n := 0    inputFile, err := os.Create("input.csv") //create the input.csv file    if err != nil {        log.Fatal(err)    }    csvwriter := csv.NewWriter(inputFile)    fmt.Println("How many records ?")    fmt.Scanln(&n)    fmt.Println("Enter the records")    var lines [][]string    for i := 0; i < n; i++ {        scanner.Scan()        text := scanner.Text()        lines = append(lines, []string{text})        err := csvwriter.WriteAll(lines)        if err != nil {            return        }    }    csvwriter.Flush()    inputFile.Close()}对于 n=2 和记录:abcd, efgh, ijklmnopq, rstu, vwxyz输出如下所示:"abcd, efgh, ijklmn""abcd, efgh, ijklmn""opq, rstu, vwxyz"这是我第一次使用 Golang,我有点迷茫 :D
查看完整描述

2 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

csvwriter.WriteAll(lines) WriteAll使用 Write将多个 CSV 记录写入w,然后调用 Flush,返回来自 Flush 的任何错误。


每次循环读取并刷新到文件时,您都会附加行。


func main() {

    scanner := bufio.NewScanner(os.Stdin)

    n := 0

    inputFile, err := os.Create("input.csv") //create the input.csv file

    if err != nil {

        log.Fatal(err)

    }

    defer inputFile.Close()


    csvwriter := csv.NewWriter(inputFile)


    fmt.Println("How many records ?")

    fmt.Scanln(&n)

    fmt.Println("Enter the records")

    var lines [][]string

    for i := 0; i < n; i++ {

        scanner.Scan()

        text := scanner.Text()

        lines = append(lines, []string{text})

    }

    err = csvwriter.WriteAll(lines)

    if err != nil {

        return

    }

    

}


查看完整回答
反对 回复 2023-03-21
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

您正在循环编写 csv,以便第一行打印成双。这是更正后的代码。


package main


import (

    "bufio"

    "encoding/csv"

    "fmt"

    "log"

    "os"

)


func main() {

    scanner := bufio.NewScanner(os.Stdin)

    n := 0

    inputFile, err := os.Create("input.csv") //create the input.csv file

    if err != nil {

        log.Fatal(err)

    }

    defer func() {

        inputFile.Close()

    }()


    csvwriter := csv.NewWriter(inputFile)

    defer func() {

        csvwriter.Flush()

    }()

    fmt.Println("How many records ?")

    fmt.Scanln(&n)

    fmt.Println("Enter the records")

    var lines [][]string

    for i := 0; i < n; i++ {

        scanner.Scan()

        text := scanner.Text()

        lines = append(lines, []string{text})


    }

    err = csvwriter.WriteAll(lines)

    if err != nil {

        return

    }

}


查看完整回答
反对 回复 2023-03-21
  • 2 回答
  • 0 关注
  • 121 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号