String 弦乐,开始吧

String 弦乐,开始吧,string,go,String,Go,文件名.txt由以下形式的许多名称组成: "KELLEE","JOSLYN","JASON","INGER","INDIRA","GLINDA","GLENNIS" 是否有人知道如何拆分字符串,使其成为由逗号分隔的单个名称 KELLEE,JOSLYN,JASON,INGER,INDIRA,GLINDA,GLENNIS 下面的代码用逗号分隔,并在名称周围留下引号,分隔“”的转义字符是什么。可以在一个拆分语句中完成,分隔”、“并留下逗号分隔吗 package main import "fmt"

文件名.txt由以下形式的许多名称组成:

"KELLEE","JOSLYN","JASON","INGER","INDIRA","GLINDA","GLENNIS"
是否有人知道如何拆分字符串,使其成为由逗号分隔的单个名称

KELLEE,JOSLYN,JASON,INGER,INDIRA,GLINDA,GLENNIS
下面的代码用逗号分隔,并在名称周围留下引号,分隔
”的转义字符是什么。可以在一个拆分语句中完成,分隔
”、“
并留下逗号分隔吗

package main

import "fmt"
import "io/ioutil"
import "strings"

func main() {
        fData, err := ioutil.ReadFile("names.txt")  // read in the external file
    if err != nil {
        fmt.Println("Err is ", err)     // print any error
    }
    strbuffer := string(fData)  // convert read in file to a string

    arr := strings.Split(strbuffer, ",")

    fmt.Println(arr)

}

顺便说一下,这是Project Euler问题#22的一部分。

拆分不会从子字符串中删除字符。您的拆分很好,您只需要在以后使用字符串处理切片。Trim(val,“\”)


现在,arr将删除前导和尾随。Jeremy的回答基本正确,完全符合您的要求。但“names.txt”文件的格式实际上是众所周知的,称为(逗号分隔值)。幸运的是,Go附带了一个包(它是标准库的一部分)用于轻松解码和编码此类格式。除了+Jeremy的解决方案外,如果格式无效、支持多行记录并正确取消引号字符串,此软件包还将给出准确的错误消息

基本用法如下所示:

package main

import (
    "encoding/csv"
    "fmt"
    "io"
    "os"
)

func main() {
    file, err := os.Open("names.txt")
    if err != nil {
        fmt.Println("Error:", err)
        return
    }
    defer file.Close()
    reader := csv.NewReader(file)
    for {
        record, err := reader.Read()
        if err == io.EOF {
            break
        } else if err != nil {
            fmt.Println("Error:", err)
            return
        }

        fmt.Println(record) // record has the type []string
    }
}
还有一种方法可以使程序更短,假设整个文件都可以放入内存中

更新:dystroy刚刚指出,您的文件只有一行。CSV阅读器也适用于这一点,但以下不太通用的解决方案也应该足够了:

for {
    if n, _ := fmt.Fscanf(file, "%q,", &name); n != 1 {
        break
    }
    fmt.Println("name:", name)
}

这不是一个真正的csv文件,因为只有一行:加上一行用于Fscanf:-)@tux21b知道如何从字符串中读取而不是打开文件吗?我是同舟共济的,只是我想将数据加载到内存中以避免触碰磁盘可能适合您的需要
for {
    if n, _ := fmt.Fscanf(file, "%q,", &name); n != 1 {
        break
    }
    fmt.Println("name:", name)
}