3 回答
TA贡献1856条经验 获得超17个赞
使用扫描仪逐行迭代文件,增加每个循环的行数。
例如
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.Scan
for scanner.Scan() {
if strings.Contains(scanner.Text(), "yourstring") {
return line, nil
}
line++
}
if err := scanner.Err(); err != nil {
// Handle the error
}
更新:如果您需要跨“数千个文件”执行此操作(根据另一个答案的评论),那么您可以将此方法包装在工作池中并同时运行。
TA贡献2011条经验 获得超2个赞
嗨试试这个。
/* 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(
TA贡献1943条经验 获得超7个赞
首先将文件分成几行(可以使用strings.Split
or完成bytes.Split
),然后遍历各行并单独检查每一行是否包含所需的字符串。如果是,则打印行号。
- 3 回答
- 0 关注
- 349 浏览
添加回答
举报