2016-05-12 441 views
-5

我试图找到谷歌模式匹配函数之间的文件和字符串,但我找不到。 我试图使用strings.Contains(),但它在大输入文件中给出了错误的结果。 我想知道,golang中是否有任何函数用于在某个文件中搜索或检查字符串?如果没有,请告诉我如何解决以另一种方式这个问题..如何在golang中检查文件是否包含字符串?

这里是我的代码:

package main 

import (
    "bufio" 
    "fmt" 
    "io/ioutil" 
    "os" 
    "strings" 
) 

func main() { 

    reader := bufio.NewReader(os.Stdin) 
    fmt.Print("Enter text: ") 
    text, _ := reader.ReadString('\n') 

    // read the whole file at once 

    b, err := ioutil.ReadFile("input.txt") 
    if err != nil { 
     panic(err) 
    } 

    s := string(b) 
    length := len(s) 

    //check whether s contains substring text 
    fmt.Println(strings.Contains(s, text)) 

} 
+1

为了获得在计算器上足够的帮助,通常最好始终包括(到目前为止)代码的样本和数据的例子中,你正在使用要在这种情况下进行解析。 – gravity

回答

3

如果我正确地读你的问题,你想从文件中读取和字符串是否确定在命令行输入的文件位于该文件中...而且我认为您所看到的问题与字符串分隔符reader.ReadString('\n')位而不是string.Contains()有关。

在我看来,这将是一件容易一点,使你想与fmt.Scanln工作;它会简化事情,并将返回一个结果,我很确定是你想要的。尝试你的代码的这种变化:

package main 

import (
    "fmt" 
    "io/ioutil" 
    "strings" 
) 

func main() { 
    var text string 
    fmt.Print("Enter text: ") 
    // get the sub string to search from the user 
    fmt.Scanln(&text) 

    // read the whole file at once 
    b, err := ioutil.ReadFile("input.txt") 
    if err != nil { 
     panic(err) 
    } 
    s := string(b) 
    // //check whether s contains substring text 
    fmt.Println(strings.Contains(s, text)) 
} 
+0

我尝试这个版本,它的工作... – Decker

1

我只是添加一个标志来使用命令行参数。如果没有通过它会提示你:)。

package main 

import (
    "flag" 
    "fmt" 
    "io/ioutil" 
    "strings" 
) 

//Usage go run filename -text=dataYouAreLookingfor 
//if looking for Nissan in file the command will be 
// go run filename -text=Nissan 

func main() { 
    var text string 
    // use it as cmdline argument 
    textArg := flag.String("text", "", "Text to search for") 
    flag.Parse() 
    // if cmdline arg was not passed ask 
    if fmt.Sprintf("%s", *textArg) == "" { 
     fmt.Print("Enter text: ") 
     // get the sub string to search from the user 
     fmt.Scanln(&text) 
    } else { 
     text = fmt.Sprintf("%s", *textArg) 
    } 
    // read the whole file at once 
    b, err := ioutil.ReadFile("input.txt") 
    if err != nil { 
     panic(err) 
    } 
    s := string(b) 
    // //check whether s contains substring text 
    fmt.Println(strings.Contains(s, text)) 
} 
相关问题