Heim > Backend-Entwicklung > Golang > Mein Programm in Golang druckt die erste Eingabe in einer Datei zweimal

Mein Programm in Golang druckt die erste Eingabe in einer Datei zweimal

王林
Freigeben: 2024-02-10 10:03:09
nach vorne
642 Leute haben es durchsucht

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

php-Editor Xigua ist beim Schreiben eines Programms in Golang auf ein interessantes Problem gestoßen: Wie wird die erste Eingabe zweimal in der Datei gedruckt? Diese Frage scheint einfach zu sein, umfasst jedoch tatsächlich mehrere Aspekte des Wissens, z. B. das Lesen von Eingaben, das Verarbeiten von Zeichenfolgen und Dateioperationen. Durch gründliche Recherche und Praxis habe ich dieses Problem erfolgreich gelöst und die Lösung mit allen geteilt. Als nächstes werde ich die Schritte meiner Programmimplementierung in Golang im Detail vorstellen.

Frageninhalt

Ich versuche, eine CSV-formatierte Zeichenfolge als Eingabe zu erhalten und sie dann in eine tatsächliche CSV-Datei zu drucken. Es funktioniert, aber es gibt die erste Zeichenfolge zweimal aus.

Mein Code sieht so aus:

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()
}
Nach dem Login kopieren

Für n=2 und notieren Sie:

abcd, efgh, ijklmn
opq, rstu, vwxyz
Nach dem Login kopieren

Die Ausgabe sieht so aus:

"abcd, efgh, ijklmn"
"abcd, efgh, ijklmn"
"opq, rstu, vwxyz"
Nach dem Login kopieren

Das ist das erste Mal, dass ich Golang verwende und ich bin ein bisschen verloren :d

Workaround

Sie schreiben die CSV-Datei in einer Schleife, sodass die erste Zeile doppelt gedruckt wird. Hier ist der korrigierte Code.

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
    }
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonMein Programm in Golang druckt die erste Eingabe in einer Datei zweimal. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage