Метод csv.Reader.Read

Метод csv.Reader.Read читает одну запись из CSV-потока и возвращает слайс строк, содержащих поля этой записи. Метод не принимает никаких параметров. При чтении записи учитываются все настройки структуры Reader, включая разделитель полей, комментарии и обработку кавычек.

Синтаксис

gofunc (r *Reader) Read() (record []string, err error)

Пример

Давайте прочитаем простую CSV-запись с двумя полями:

gopackage main

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

func main() {
  data := "John,30\n"
  reader := csv.NewReader(strings.NewReader(data))

  res, err := reader.Read()
  if err != nil {
    fmt.Println(err)
    return
  }

  fmt.Println(res)
}

Результат выполнения кода:

go[John 30]

Пример

Давайте прочитаем CSV-запись с полями в кавычках:

gopackage main

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

func main() {
  data := "\"John, Doe\",\"Software Engineer\"\n"
  reader := csv.NewReader(strings.NewReader(data))

  res, err := reader.Read()
  if err != nil {
    fmt.Println(err)
    return
  }

  fmt.Println(res)
}

Результат выполнения кода:

go[John, Doe Software Engineer]

Пример

Давайте прочитаем несколько записей в цикле до конца файла:

gopackage main

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

func main() {
  data := "John,30,Engineer\nJane,25,Designer\nBob,35,Manager\n"
  reader := csv.NewReader(strings.NewReader(data))

  for {
    res, err := reader.Read()
    if err != nil {
      break
    }
    fmt.Println(res)
  }
}

Результат выполнения кода:

go[John 30 Engineer]
[Jane 25 Designer]
[Bob 35 Manager]

Пример

Давайте обработаем ошибку, если файл пуст или достигнут конец:

gopackage main

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

func main() {
  data := ""
  reader := csv.NewReader(strings.NewReader(data))

  res, err := reader.Read()
  if err == io.EOF {
    fmt.Println("End of file")
    return
  }
  if err != nil {
    fmt.Println(err)
    return
  }

  fmt.Println(res)
}

Результат выполнения кода:

go"End of file"

Смотрите также

  • метод csv.Reader.ReadAll,
    который читает все записи из CSV-потока сразу
  • метод csv.Writer.Write,
    который записывает одну запись в CSV-поток
  • метод csv.Writer.WriteAll,
    который записывает все записи в CSV-поток
  • тип csv.ParseError,
    который возвращается при ошибках синтаксического анализа CSV