为了账号安全,请及时绑定邮箱和手机立即绑定

如何打印与给定输入相关的完整输出行?

如何打印与给定输入相关的完整输出行?

Go
叮当猫咪 2022-08-24 20:36:31
在此代码中,我从文件中查找数据,它还为我提供了我搜索的结果。这意味着它只打印姓名或电话号码。但是我想打印存在特定姓名或电话号码的整行。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)    }}
查看完整描述

1 回答

?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

如果位置部分位于一条线中,则可以从那里向后扫描以查找文件的上一个 \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]))

也可以使用 和 使用 包编写它,但必须处理在索引点之后找不到 \n 的情况。bytesLastIndexByteIndexByte


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]))


查看完整回答
反对 回复 2022-08-24
  • 1 回答
  • 0 关注
  • 117 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号