Elixir:
CSV와 함께 작업하기

방법:

강력한 패턴 매칭과 파이프라이닝 지원을 갖춘 Elixir는 외부 라이브러리 없이도 효율적으로 CSV 파일을 처리할 수 있습니다. 그러나 보다 고급 필요성에 대해서는 nimble_csv 라이브러리가 빠르고 간단한 선택입니다.

외부 라이브러리 없이 CSV 파일 읽기

Elixir의 내장 함수를 사용하여 CSV 파일을 읽고 파싱할 수 있습니다:

defmodule CSVReader do
  def read_file(file_path) do
    File.stream!(file_path)
    |> Stream.map(&String.trim_trailing/1)
    |> Stream.map(&String.split(&1, ","))
    |> Enum.to_list()
  end
end

# 예제 사용
CSVReader.read_file("data.csv")
# 출력: [["Header1", "Header2"], ["Row1Value1", "Row1Value2"], ["Row2Value1", "Row2Value2"]]

CSV 파일에 데이터 쓰기

마찬가지로, CSV 파일에 데이터를 쓰려면:

defmodule CSVWriter do
  def write_to_file(file_path, data) do
    File.open(file_path, [:write], fn file ->
      Enum.each(data, fn row ->
        IO.write(file, Enum.join(row, ",") <> "\n")
      end)
    end)
  end
end

# 예제 사용
data = [["Header1", "Header2"], ["Value1", "Value2"], ["Value3", "Value4"]]
CSVWriter.write_to_file("output.csv", data)
# output.csv 파일을 생성하고 CSV 형식으로 데이터를 포맷합니다

nimble_csv 사용하기

더 복잡한 CSV 처리를 위해 nimble_csv는 CSV 데이터를 작업하는 강력하고 유연한 방법을 제공합니다. 우선, mix.exs에서 nimble_csv를 의존성에 추가하고 mix deps.get을 실행하세요:

defp deps do
  [
    {:nimble_csv, "~> 1.2"}
  ]
end

nimble_csv를 사용하여 CSV 데이터 파싱하기:

defmodule MyCSVParser do
  NimbleCSV.define(MyParser, separator: ",", escape: "\\")

  def parse(file_path) do
    file_path
    |> File.stream!()
    |> MyParser.parse_stream()
    |> Enum.to_list()
  end
end

# 예제 사용
MyCSVParser.parse("data.csv")
# `nimble_csv`를 사용한 출력은 파서 설정에 따라 다르지만, 일반적으로 리스트의 리스트나 튜플 형태로 보입니다.

nimble_csv를 사용하여 CSV 데이터를 쓰는 것은 적절한 포맷으로 데이터를 수동으로 변환한 다음 파일에 쓰는 것을 요구하며, 이는 평범한 Elixir 예제처럼 진행되지만, 정확하게 포맷된 CSV 행을 생성하기 위해 nimble_csv를 활용합니다.

작업의 복잡성에 적합한 접근 방식을 선택함으로써, Elixir에서 CSV 파일을 유연하고 강력하게 다룰 수 있습니다.