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 לתלות שלך ב-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 ניתן להתאמה בהתבסס על ההגדרה, אך בדרך כלל נראה כמו רשימת רשימות או צמדים תלוי באיך שהגדרת את המפענח שלך.

כתיבת נתוני CSV באמצעות nimble_csv דורשת המרה ידנית של הנתונים שלך לפורמט הנכון ולאחר מכן כתיבתם לקובץ, דומה מאוד לדוגמה הפשטית של Elixir אך מנצלת את nimble_csv ליצירת שורות CSV מעוצבות נכון.

בבחירה של הגישה המתאימה למורכבות המשימה שלך, תוכל לטפל בקבצי CSV ב-Elixir עם גמישות ועוצמה רבה.