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.
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
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!