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

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

我可以傳遞一個字符串作為 bufio.ReadString() 的分隔符嗎?

我可以傳遞一個字符串作為 bufio.ReadString() 的分隔符嗎?

Go
米琪卡哇伊 2021-12-07 10:30:14
我有一個包含多行查詢的文件。我想一一閱讀并打印出來。就像是 :臨時文件select * from table1;  select *  from table2;select 1; 由于我可以進行多行查詢,因此我想使用 ;\n 作為分隔符。那可能嗎 ?有沒有更好的方法可以代替bufio.ReadString?
查看完整描述

2 回答

?
侃侃無極

TA貢獻2051條經驗 獲得超10個贊

首先,原型bufio.ReadString是


 func (b *Reader) ReadString(delim byte) (line string, err error)

它只能將一個字節作為 arg,因此您的;\n分隔符將不起作用。


使用;作為分隔符來代替。


但是如果你使用ReadString(';')它會在你的結果中包含其他字符,比如 '\n'


一個例子:


package main


import (

    "bufio"

    "fmt"

    "strings"

)


func main() {


    const raw = `select * from table1;  

select *  

from table2;


select 1;`


    br := bufio.NewReader(strings.NewReader(raw))


    var err error

    var s string

    err = nil

    for err == nil {

        s, err = br.ReadString(';')

        if err == nil {

            fmt.Printf("%q", s)

        }


    }

這將得到:


"select * from table1;""  \nselect *  \nfrom table2;""\n\nselect 1;"



解決方案:


使用Scanner可能更方便,實現如下。


ps:;將被視為單詞的一部分


package main


import (

    "bufio"

    "fmt"

    "os"

    "strings"

    "bytes"

)


func main() {

    const raw = `select * from table1;  

select *  

from table2;


select 1;`


    scanner := bufio.NewScanner(strings.NewReader(raw))

    scanner.Split(bufio.ScanWords)


    var tmpbuf bytes.Buffer


    for scanner.Scan() {

        w := scanner.Text()

        tmpbuf.WriteString(w)

        if w[len(w)-1] == ';' {

            tmpbuf.WriteString("\n")

            fmt.Printf(tmpbuf.String())

            tmpbuf.Reset()

        } else {

            tmpbuf.WriteString(" ")

        }

    }

    if err := scanner.Err(); err != nil {

        fmt.Fprintln(os.Stderr, "reading input:", err)

    }

}

你會得到:


select * from table1;

select * from table2;

select 1;


查看完整回答
反對 回復 2021-12-07
?
www說

TA貢獻1775條經驗 獲得超8個贊

您可以使用bufio.Scannerhttps : //golang.org/pkg/bufio/#Scanner 查看行示例:https : //golang.org/pkg/bufio/#example_Scanner_lines


查看完整回答
反對 回復 2021-12-07
  • 2 回答
  • 0 關注
  • 276 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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