登录
首页 >  Golang >  Go问答

如何获得与给定输入相关的完整输出行?

来源:stackoverflow

时间:2024-02-13 14:21:21 245浏览 收藏

小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《如何获得与给定输入相关的完整输出行?》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

问题内容

在这段代码中,我从文件中查找数据,它也给出了我搜索的结果。这意味着它只打印姓名或电话号码。但我想打印包含特定姓名或电话号码的整行。

func readFile() {
    var searchData string
    fmt.Printf("Enter the name or phone number to search: ")
    fmt.Scanln(&searchData)

    content, err := ioutil.ReadFile("data.csv")

    if err != nil {
        log.Fatal(err)
    }

    suffix := suffixarray.New(content)
    indexList := suffix.Lookup([]byte(searchData), -1)
    if len(indexList) == 0 {
        fmt.Println("Data is not found")
        return
    }
    data := string(content)
    for _, idx := range indexList {
        fmt.Println("Data is found:", string(data[idx:idx+len(searchData)]))
        fmt.Println(data)
    }
}

正确答案


如果您在一行中找到了该位置,则可以从那里向后扫描以查找前一个 \n 或文件的开头。同样,您可以从那里向前扫描以查找下一个 \n 或文件末尾。这两个端点将为您提供包含给定索引的完整行。

类似这样的东西(未经测试):

start := idx
for start >= 0 && data[start] != '\n' {
    start--
}
end := idx
for end < len(data) && data[end] != '\n' {
    end++
}
fmt.println(string(data[start+1:end]))

您还可以使用 lastindexbyteindexbyte 包使用 bytes 来编写它,但您必须处理在索引点之后找不到 \n 的情况。

start := bytes.LastIndexByte(data[:idx], '\n')
end := bytes.IndexByte(data[idx:], '\n') + idx
if end == idx - 1 { end = len(data) }
fmt.Println(string(data[start+1:end]))

好了,本文到此结束,带大家了解了《如何获得与给定输入相关的完整输出行?》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>