Переменная имени файла не распознается os.Open, но "жестко закодированное" имя файла делает - PullRequest
0 голосов
/ 17 марта 2020

Как видно из названия, я пытаюсь прочитать файл пазла судоку с размером пазла 1 9x9. Вот код:

package main

import (
    "bufio"
    "fmt"
    "log"
    "os"
)

func check(e error){
    if e != nil{
        panic(e)
    }
}

func main(){
    var mFile string
    var puzzle []string

    s := bufio.NewReader(os.Stdin)
    fmt.Println("Please enter file name: ")
    mFile, _ = s.ReadString('\n')

    fmt.Print("Confirm file: " + mFile)

    readFile, err := os.Open(mFile)

    if err != nil{
        log.Fatalf("Failed to open file: %s", err)
    }

    fileScanner := bufio.NewScanner(readFile)
    fileScanner.Split(bufio.ScanLines)

    for fileScanner.Scan() {
        puzzle = append(puzzle, fileScanner.Text())
    }

    readFile.Close()

    for _, eachLine := range puzzle{
        fmt.Println(eachLine)
    }

}

Программа запрашивает имя файла, которое принято, и строка 24:

fmt.Print("Confirm file: " + mFile)

Подтверждает, что имя файла записано, но когда оно передает переменная к os.Open говорит, что файл не существует. Но если я вручную кодирую os.Open ("theFileName.txt"), файл открывается и печатается, как и ожидалось.

По любой причине os.Open не распознает переменную и только жестко закодированный файл. имя

Ответы [ 2 ]

4 голосов
/ 17 марта 2020

С документы :

ReadString считывает до первого появления разделителя во входных данных, возвращая строку, содержащую данные вплоть до разделителя и включительно.

Новая строка в mFile. Вы должны удалить это прежде, чем передать его os.Open. Когда вы жестко закодировали имя файла, вы не включили эту завершающую новую строку.

0 голосов
/ 17 марта 2020

Вы также можете использовать fmt.Scan (), чтобы принять ввод текста от пользователя, если между именем файла нет пробела (переводы строки считаются пробелом)

package main

import (
    "bufio"
    "fmt"
    "log"
    "os"
)

func check(e error) {
    if e != nil {
        panic(e)
    }
}

func main() {

    var puzzle []string

    var fName string
    fmt.Println("Please enter file name: ")
    _, err := fmt.Scan(&fName)
    if err != nil {
        log.Println(err)
        return
    }

    fmt.Println("Confirm file:" + fName)

    readFile, err := os.Open(fName)

    if err != nil {
        log.Fatalf("Failed to open file: %s", err)
    }

    fileScanner := bufio.NewScanner(readFile)
    fileScanner.Split(bufio.ScanLines)

    for fileScanner.Scan() {
        puzzle = append(puzzle, fileScanner.Text())
    }

    readFile.Close()

    for _, eachLine := range puzzle {
        fmt.Println(eachLine)
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...