Как прочитать файл данных, используя golang? - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть текстовый файл:

2
Data 5 1.32
DataSecond 4 5.41
4
...

И так далее.Как прочитать первую строку, чтобы узнать количество, а затем продолжить разбивать другие строки, чтобы получить отдельные параметры?Я попытался сделать следующее, но это явно неправильно.

f, err := os.Open("DATA.txt")
check(err)
s := bufio.NewScanner(f)
for s.Scan() {
    line := s.Text()
    count, err := strconv.Atoi(line)
    check(err)
    for i := 0; i < count; i++ {
        testArray := strings.Fields(s.Text())
        for _, v := range testArray {
            fmt.Println(v)
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Вы можете сделать что-то вроде этого, прочитать отдельные строки в count int и использовать его в качестве теста.Если count> 0, используйте sscanf для получения других значений

func main() {
    f, err := os.Open("DATA.txt")
    check(err)
    s := bufio.NewScanner(f)
    count := 0
    for s.Scan() {
        line := s.Text()
        if count < 1 {
            count, err = strconv.Atoi(line)
            check(err)
            continue
        }
        count--
        var tag string
        var n int
        var f float64
        fmt.Sscanf(line, "%s %d %f", &tag, &n, &f)
        // not sure what you really wnant to do with the data!
        fmt.Println(n, f, tag)
    }
}
0 голосов
/ 23 ноября 2018

Вы просто забыли Scan() во внутреннем цикле.

f, err := os.Open("DATA.txt")
check(err)
s := bufio.NewScanner(f)
for s.Scan() {
    line := s.Text()
    count, err := strconv.Atoi(line)
    check(err)
    for i := 0; i < count && s.Scan(); i++ {
        testArray := strings.Fields(s.Text())
        for _, v := range testArray {
            fmt.Println(v)
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...