Maison  >  Article  >  développement back-end  >  Comment le package « encoding/csv » de Go gère-t-il l'échappement des guillemets doubles lors de l'écriture et de la lecture de fichiers CSV ?

Comment le package « encoding/csv » de Go gère-t-il l'échappement des guillemets doubles lors de l'écriture et de la lecture de fichiers CSV ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-25 10:07:48746parcourir

How does Go's `encoding/csv` package handle double quote escaping when writing and reading CSV files?

Citation double CSV s'échappant dans le codage/csv de Go

Lorsque vous travaillez avec des fichiers CSV dans Go à l'aide du package encoding/csv, il est crucial de comprendre comment les guillemets doubles ("") sont gérés. Les guillemets doubles sont utilisés pour entourer des chaînes contenant des caractères spéciaux tels que des virgules, qui peuvent autrement casser le format CSV.

Dans Go, lors de l'écriture dans un fichier CSV, il est important d'échapper les guillemets doubles dans les chaînes. Le package encoding/csv le fait automatiquement, en ajoutant des guillemets doubles supplémentaires autour des guillemets doubles dans la chaîne. Cela fait partie de la norme CSV, qui nécessite que les guillemets doubles soient échappés pour garantir la précision de l'analyse.

Exemple :

<code class="go">import (
    "encoding/csv"
    "fmt"
    "os"
)

func main() {
    f, err := os.Create("./test.csv")
    if err != nil {
        log.Fatal("Error: %s", err)
    }
    defer f.Close()

    w := csv.NewWriter(f)

    s := "Cr@zy text with , and \ and \" etc"

    record := []string{
        "Unquoted string",
        s,
    }
    fmt.Println(record)
    w.Write(record)

    // Quote the string to escape double quotes
    record = []string{
        "Quoted string",
        fmt.Sprintf("%q", s),
    }
    fmt.Println(record)
    w.Write(record)

    w.Flush()
}</code>

Lorsque le script s'exécute, la sortie sera afficher les chaînes entourées de guillemets doubles :

[Unquoted string Cr@zy text with , and \ and " etc]
[Quoted string "Cr@zy text with , and \ and \" etc"]

Cependant, lors de la lecture à partir du fichier CSV, le package encoding/csv supprime automatiquement les guillemets doubles échappés. Cela signifie que les chaînes seront analysées correctement, sans guillemets doubles supplémentaires.

Exemple de fonction de lecture :

<code class="go">func readCSV() {
    file, err := os.Open("./test.csv")
    defer file.Close()
    cr := csv.NewReader(file)
    records, err := cr.ReadAll()
    if err != nil {
        log.Fatal("Error: %s", err)
    }
    for _, record := range records {
        fmt.Println(record)
    }
}</code>

Lorsque la fonction de lecture est appelée, vous voir le résultat :

[Unquoted string Cr@zy text with , and \ and " etc]
[Quoted string Cr@zy text with , and \ and " etc]

Cela montre comment les guillemets doubles sont gérés lors des opérations d'écriture et de lecture, garantissant que les données sont à la fois stockées et récupérées correctement.

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!

Déclaration:
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