亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何打印與給定輸入相關的完整輸出行?

如何打印與給定輸入相關的完整輸出行?

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 關注
  • 99 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號