猿问

Golang:在文件中查找字符串并显示行号

read, err := ioutil.ReadFile(path)

if err != nil {

    return err

}


if strings.Contains(string(read), "STRING") {

    // display line number?

    // what if many occurrences of the string

    // how to display for each the line number?

}

我正在尝试在文件中搜索特定字符串并显示该字符串所在的行号。


小唯快跑啊
浏览 350回答 3
3回答

慕慕森

使用扫描仪逐行迭代文件,增加每个循环的行数。例如f, err := os.Open(path)if err != nil {    return 0, err}defer f.Close()// Splits on newlines by default.scanner := bufio.NewScanner(f)line := 1// https://golang.org/pkg/bufio/#Scanner.Scanfor scanner.Scan() {    if strings.Contains(scanner.Text(), "yourstring") {        return line, nil    }    line++}if err := scanner.Err(); err != nil {    // Handle the error}更新:如果您需要跨“数千个文件”执行此操作(根据另一个答案的评论),那么您可以将此方法包装在工作池中并同时运行。

森林海

嗨试试这个。    /* ioutil.ReadFile returns []byte, error */    data, err := ioutil.ReadFile("output.txt")    /* ... omitted error check..and please add ... */    /* find index of newline */    file := string(data)    line := 0    /* func Split(s, sep string) []string */    temp := strings.Split(file, "\n")    for _, item := range temp {        fmt.Println("[",line,"]\t",item)        line++    }基本上,它将使用 ioutil 包读取文件并从内容中找出换行符。当您找到某个字符或换行符等时,字符串包非常有用。查看 GO 的官方网页以获取更多说明和示例。(https://golang.org/pkg/strings/#Split)。我从上面的(https://golang.org/pkg/strings/#Split)制作了一个“output.txt” ,预期的输出应该是[ 0 ]    [ 1 ]    Examples[ 2 ]    [ 3 ]        Contains[ 4 ]        ContainsAny[ 5 ]        Count[ 6 ]        EqualFold[ 7 ]        Fields[ 8 ]        FieldsFunc[ 9 ]        HasPrefix[ 10 ]       HasSuffix...关于格式,您可以 fmt.Println("[",line,"]\t",item)使用 fmt.Printf(

杨__羊羊

首先将文件分成几行(可以使用strings.Splitor完成bytes.Split),然后遍历各行并单独检查每一行是否包含所需的字符串。如果是,则打印行号。
随时随地看视频慕课网APP

相关分类

Go
我要回答