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

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

王林
王林nach vorne
2024-02-10 10:03:09583Durchsuche

我在 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()
}

Für n=2 und notieren Sie:

abcd, efgh, ijklmn
opq, rstu, vwxyz

Die Ausgabe sieht so aus:

"abcd, efgh, ijklmn"
"abcd, efgh, ijklmn"
"opq, rstu, vwxyz"

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
    }
}

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen