猿问

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

在此代码中,我从文件中查找数据,它还为我提供了我搜索的结果。这意味着它只打印姓名或电话号码。但是我想打印存在特定姓名或电话号码的整行。


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)

    }

}


叮当猫咪
浏览 119回答 1
1回答

蝴蝶刀刀

如果位置部分位于一条线中,则可以从那里向后扫描以查找文件的上一个 \n 或开头。同样,您可以从那里向前扫描以查找文件的下一个 \n 或末尾。这两个终结点将为您提供包含给定索引的完整行。像这样的东西(未经测试):start := idxfor start >= 0 && data[start] != '\n' {&nbsp; &nbsp; start--}end := idxfor end < len(data) && data[end] != '\n' {&nbsp; &nbsp; end++}fmt.Println(string(data[start+1:end]))也可以使用 和 使用 包编写它,但必须处理在索引点之后找不到 \n 的情况。bytesLastIndexByteIndexBytestart := bytes.LastIndexByte(data[:idx], '\n')end := bytes.IndexByte(data[idx:], '\n') + idxif end == idx - 1 { end = len(data) }fmt.Println(string(data[start+1:end]))
随时随地看视频慕课网APP

相关分类

Go
我要回答