Elixir:
การทำงานกับ CSV

วิธีการ:

Elixir ด้วยความสามารถในการจับคู่รูปแบบและการสนับสนุนสำหรับการไหลข้อมูล สามารถจัดการไฟล์ CSV ได้อย่างมีประสิทธิภาพ แม้ว่าจะไม่มีไลบรารีภายนอก อย่างไรก็ตาม สำหรับความต้องการที่ซับซ้อนขึ้น nimble_csv เป็นตัวเลือกที่รวดเร็วและตรงไปตรงมา

การอ่านไฟล์ CSV โดยไม่ใช้ไลบรารีภายนอก

คุณสามารถอ่านและแยกวิเคราะห์ไฟล์ CSV โดยใช้ฟังก์ชันที่มีอยู่ใน Elixir:

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 อย่างแรกเพิ่ม nimble_csv เข้าไปใน dependencies ใน mix.exs และรัน mix deps.get:

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

การแยกวิเคราะห์ข้อมูล CSV กับ nimble_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 อาจปรับแต่งได้ตามการกำหนดขึ้น แต่โดยทั่วไปมันจะเป็นรูปแบบของรายการหรือทูเพิล ขึ้นอยู่กับวิธีที่คุณตั้งค่า parser ของคุณ

การเขียนข้อมูล CSV โดยใช้ nimble_csv ต้องการการแปลงข้อมูลของคุณเป็นรูปแบบที่เหมาะสมก่อน จากนั้นเขียนลงไฟล์ เหมือนตัวอย่าง Elixir ธรรมดาแต่ใช้ประโยชน์จาก nimble_csv ในการสร้างแถว CSV ที่จัดรูปแบบอย่างถูกต้อง

โดยเลือกวิธีการที่เหมาะสมกับความซับซ้อนของงานของคุณ คุณสามารถจัดการไฟล์ CSV ใน Elixir ด้วยความยืดหยุ่นและพลังอย่างมาก