Maison > développement back-end > Golang > le corps du texte

Mon programme en Golang imprime deux fois la première entrée d'un fichier

王林
Libérer: 2024-02-10 10:03:09
avant
602 Les gens l'ont consulté

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

l'éditeur php Xigua a rencontré un problème intéressant lors de l'écriture d'un programme en Golang : comment imprimer deux fois la première entrée du fichier. Cette question semble simple, mais elle implique en réalité plusieurs aspects de connaissances tels que la façon de lire les entrées, de traiter les chaînes et les opérations sur les fichiers. Grâce à des recherches et une pratique approfondies, j'ai réussi à résoudre ce problème et à partager la solution avec tout le monde. Ensuite, je présenterai en détail les étapes de mise en œuvre de mon programme dans Golang.

Contenu de la question

J'essaie d'obtenir une chaîne au format CSV en entrée, puis de l'imprimer dans un fichier CSV réel. Cela fonctionne, mais il imprime la première chaîne deux fois.

Mon code ressemble à ceci :

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()
}
Copier après la connexion

Pour n=2 et enregistrez :

abcd, efgh, ijklmn
opq, rstu, vwxyz
Copier après la connexion

Le résultat ressemble à ceci :

"abcd, efgh, ijklmn"
"abcd, efgh, ijklmn"
"opq, rstu, vwxyz"
Copier après la connexion

C'est la première fois que j'utilise Golang et je suis un peu perdu :d

Solution de contournement

Vous écrivez le csv en boucle pour que la première ligne s'imprime en double. Voici le code corrigé.

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
    }
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal