Конвертировать Raw CSV Line в массив - PullRequest
0 голосов
/ 18 февраля 2020

Другие предложения были либо в Java, либо не учитывали это (что я нашел).

reader := bufio.NewReader(file)
for err == nil {
    line, err = Readln(reader)
    record := strings.Split(line, ",")
    fmt.Println(len(record), line)
}

Используя это l oop, я эффективно читаю свои Файл CSV, однако, имеет проблему с Split, когда он встречает строку, которая содержит запятые внутри предполагаемого значения. Например, "Fake Company USA, Inc.", strings.Split также будет разбивать эту запятую внутри строки.

Есть ли способ разделить запятую здесь? Например, запятая с 0 пробелами вокруг нее или запятая, которая не заключена в кавычки?

Примечание. с большими файлами, поэтому я прибегаю к bufio для обработки ради.

1 Ответ

5 голосов
/ 18 февраля 2020

Есть ли причина, по которой вы бы не использовали встроенный пакет encoding/csv? Пока вы используете .Read, а не .ReadAll, производительность должна совпадать с чтением построчно и попыткой разделить себя.

import (
    "encoding/csv"
    "io"
    "fmt"
)

reader := csv.NewReader(file)

for {
    records, err := reader.Read()   
    if err != nil {
        if err == io.EOF {
            break
        }
        log.Fatal(err)
    }

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