2016-05-12 4 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)) 
} 
Смежные вопросы