2016-05-12 12 views
-5

ファイルと文字列の間のパターンマッチング機能についてGoogleで見つけようとしましたが、見つけられませんでした。 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

StackOverflowについての十分なヘルプを得るには、コードのサンプル(これまでのところ)と、使用しているデータの例をこのケースで解析することをお勧めします。 – 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)) 
} 
関連する問題