Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File Go:读取文件中特定范围的行_File_Go_Range_Line - Fatal编程技术网

File Go:读取文件中特定范围的行

File Go:读取文件中特定范围的行,file,go,range,line,File,Go,Range,Line,我主要需要读取文件中特定范围的行,如果字符串与索引字符串匹配(比如说“Hello World!”),则返回true,但我不确定如何执行此操作。我知道如何读取单个行和整个文件,但不知道如何读取行的范围。有没有任何库可以提供帮助,或者有一个简单的脚本来实现它?非常感谢您的帮助 像这样的 package main import ( "bufio" "bytes" "fmt" "os" ) func Find(fname string, from, to int, n

我主要需要读取文件中特定范围的行,如果字符串与索引字符串匹配(比如说“Hello World!”),则返回true,但我不确定如何执行此操作。我知道如何读取单个行和整个文件,但不知道如何读取行的范围。有没有任何库可以提供帮助,或者有一个简单的脚本来实现它?非常感谢您的帮助

像这样的

package main

import (
    "bufio"
    "bytes"
    "fmt"
    "os"
)

func Find(fname string, from, to int, needle []byte) (bool, error) {
    f, err := os.Open(fname)
    if err != nil {
        return false, err
    }
    defer f.Close()
    n := 0
    scanner := bufio.NewScanner(f)
    for scanner.Scan() {
        n++
        if n < from {
            continue
        }
        if n > to {
            break
        }
        if bytes.Index(scanner.Bytes(), needle) >= 0 {
            return true, nil
        }
    }
    return false, scanner.Err()
}

func main() {
    found, err := Find("test.file", 18, 27, []byte("Hello World"))
    fmt.Println(found, err)
}
主程序包
进口(
“布菲奥”
“字节”
“fmt”
“操作系统”
)
func Find(fname字符串,from,to int,指针[]字节)(布尔,错误){
f、 错误:=操作系统打开(fname)
如果错误!=零{
返回false,错误
}
延迟f.关闭()
n:=0
扫描仪:=bufio.NewScanner(f)
对于scanner.Scan(){
n++
如果n到{
打破
}
如果bytes.Index(scanner.bytes(),指针)>=0{
返回真,无
}
}
返回false,scanner.Err()
}
func main(){
Find,err:=Find(“test.file”,18,27,[]字节(“Hello World”))
fmt.Println(找到,错误)
}

如果您使用
for
迭代一段行,您可以使用

for _,line := range file[2:40] {
    // do stuff
}

精确地非常感谢你!