3 回答

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超17個贊
使用掃描儀逐行迭代文件,增加每個循環(huán)的行數(shù)。
例如
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
}
更新:如果您需要跨“數(shù)千個文件”執(zhí)行此操作(根據(jù)另一個答案的評論),那么您可以將此方法包裝在工作池中并同時運(yùn)行。

TA貢獻(xiàn)2011條經(jīng)驗(yàn) 獲得超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 包讀取文件并從內(nèi)容中找出換行符。當(dāng)您找到某個字符或換行符等時,字符串包非常有用。查看 GO 的官方網(wǎng)頁以獲取更多說明和示例。(https://golang.org/pkg/strings/#Split)。
我從上面的(https://golang.org/pkg/strings/#Split)制作了一個“output.txt” ,預(yù)期的輸出應(yīng)該是
[ 0 ]
[ 1 ] Examples
[ 2 ]
[ 3 ] Contains
[ 4 ] ContainsAny
[ 5 ] Count
[ 6 ] EqualFold
[ 7 ] Fields
[ 8 ] FieldsFunc
[ 9 ] HasPrefix
[ 10 ] HasSuffix
...
關(guān)于格式,您可以 fmt.Println("[",line,"]\t",item)使用 fmt.Printf(

TA貢獻(xiàn)1943條經(jīng)驗(yàn) 獲得超7個贊
首先將文件分成幾行(可以使用strings.Split
or完成bytes.Split
),然后遍歷各行并單獨(dú)檢查每一行是否包含所需的字符串。如果是,則打印行號。
- 3 回答
- 0 關(guān)注
- 403 瀏覽
添加回答
舉報(bào)