0Pricing
C# Academy · บทเรียน

รูปแบบการแยกวิเคราะห์ CSV อย่างง่าย

แยกวิเคราะห์บรรทัด CSV: ใช้ Split แบบตรงไปตรงมากับไฟล์ง่าย ๆ ใช้ TryParse ที่ปลอดภัยกับตัวเลข แล้วสร้างตัวแยกที่รองรับเครื่องหมายอัญประกาศสำหรับจุลภาคภายในอัญประกาศ

รูปแบบการแยกวิเคราะห์ CSV อย่างง่าย เป็นบทเรียน C# Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C# Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C# Academy มีบทเรียนทั้งหมด 3 บทเรียน

ภาพรวมการแยกวิเคราะห์ CSV

เป้าหมาย: แยกวิเคราะห์ CSV ขนาดเล็กได้อย่างน่าเชื่อถือ

  • เริ่มด้วย Split อย่างง่ายสำหรับไฟล์ที่ไม่มีเครื่องหมายอัญประกาศ
  • ใช้ TryParse สำหรับตัวเลข
  • จัดการ ฟิลด์ที่มีเครื่องหมายอัญประกาศ ด้วยตัวสแกนขนาดเล็ก

การแยกแบบง่ายโดยไม่ใช้เครื่องหมายอัญประกาศ

สำหรับ CSV ที่ไม่มีเครื่องหมายอัญประกาศ การใช้ Split อย่างง่ายก็เพียงพอและอ่านเข้าใจได้ง่าย

using System;

public class Program
{
  public static void Main(string[] args)
  {
    // Simple: no quotes, commas separate fields
    string line = "Apple,10,2.5";
    string[] parts = line.Split(','); // naive split

    Console.WriteLine("Name = " + parts[0]);
    Console.WriteLine("Qty  = " + parts[1]);
    Console.WriteLine("Price= " + parts[2]);
  }
}

การแยกวิเคราะห์ตัวเลขอย่างปลอดภัย

ใช้ Trim และ TryParse ร่วมกับ culture เช่น InvariantCulture เพื่อป้องกันการหยุดทำงานเมื่อข้อมูลไม่ถูกต้อง

using System;
using System.Globalization;

public class Program
{
  public static void Main(string[] args)
  {
    string line = "Banana, 7, 1.99";
    string[] p = line.Split(',');

    string name = p[0].Trim();
    int qty;
    double price;

    bool okQty = Int32.TryParse(p[1].Trim(), NumberStyles.Integer, CultureInfo.InvariantCulture, out qty);
    bool okPrice = Double.TryParse(p[2].Trim(), NumberStyles.Float, CultureInfo.InvariantCulture, out price);

    Console.WriteLine("Parsed: " + name + " | ok=" + (okQty && okPrice) + " -> " + qty + " x " + price);
  }
}

เหตุผลที่การแยกแบบง่ายล้มเหลว

ฟิลด์ที่อยู่ในเครื่องหมายอัญประกาศอาจมีเครื่องหมายจุลภาคอยู่ด้วย การใช้ Split ธรรมดาจะแยกฟิลด์นั้นออกเป็นหลายส่วน

using System;

public class Program
{
  public static void Main(string[] args)
  {
    // Name has a comma inside quotes; naive split breaks it
    string line = "\"Orange, Blood\",12,3.40";
    string[] parts = line.Split(','); // wrong: splits inside the quoted name

    Console.WriteLine("Parts found = " + parts.Length); // 4, not 3
    foreach (string s in parts) Console.WriteLine("[" + s + "]");
  }
}

การแยกที่รู้จักเครื่องหมายอัญประกาศ

ตัวสแกนขนาดเล็กจะสลับสถานะ inQuotes และไม่สนใจเครื่องหมายจุลภาคที่อยู่ภายในเครื่องหมายอัญประกาศ นอกจากนี้ยังรองรับเครื่องหมายอัญประกาศซ้ำ ("")

using System;
using System.Collections.Generic;
using System.Text;

public class Program
{
  // Splits a CSV line handling quotes and doubled "" inside quoted fields.
  static List<string> SplitCsvLine(string line)
  {
    List<string> fields = new List<string>();
    StringBuilder sb = new StringBuilder();
    bool inQuotes = false;

    for (int i = 0; i < line.Length; i++)
    {
      char c = line[i];

      if (c == '\"')
      {
        if (inQuotes && i + 1 < line.Length && line[i + 1] == '\"')
        {
          // Escaped quote ("") inside a quoted field
          sb.Append('\"');
          i++; // skip next quote
        }
        else
        {
          inQuotes = !inQuotes; // toggle
        }
      }
      else if (c == ',' && !inQuotes)
      {
        fields.Add(sb.ToString());
        sb.Length = 0; // reset
      }
      else
      {
        sb.Append(c);
      }
    }

    fields.Add(sb.ToString());
    return fields;
  }

  public static void Main(string[] args)
  {
    string line = "\"Orange, Blood\",12,\"He said \"\"Hi!\"\"\"";
    List<string> parts = SplitCsvLine(line);

    Console.WriteLine("Fields = " + parts.Count);
    foreach (string f in parts) Console.WriteLine("[" + f + "]");
  }
}

จาก CSV ไปเป็นออบเจ็กต์

ผสานตัวแยกเข้ากับ TryParse และการปรับข้อมูลเล็กน้อย เพื่อสร้างออบเจ็กต์ที่มีชนิดข้อมูลชัดเจนได้อย่างปลอดภัย

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Text;

public sealed class Product
{
  public string Name;
  public int Quantity;
  public double Price;
}

public class Program
{
  static List<string> SplitCsvLine(string line)
  {
    List<string> fields = new List<string>();
    StringBuilder sb = new StringBuilder();
    bool inQuotes = false;

    for (int i = 0; i < line.Length; i++)
    {
      char c = line[i];
      if (c == '\"')
      {
        if (inQuotes && i + 1 < line.Length && line[i + 1] == '\"')
        { sb.Append('\"'); i++; }
        else { inQuotes = !inQuotes; }
      }
      else if (c == ',' && !inQuotes)
      { fields.Add(sb.ToString()); sb.Length = 0; }
      else
      { sb.Append(c); }
    }
    fields.Add(sb.ToString());
    return fields;
  }

  static bool TryParseProduct(string line, out Product p)
  {
    p = null;
    List<string> f = SplitCsvLine(line);
    if (f.Count < 3) return false;

    string name = f[0].Trim().Trim('\"');
    int qty;
    double price;

    bool okQty = Int32.TryParse(f[1].Trim(), NumberStyles.Integer, CultureInfo.InvariantCulture, out qty);
    bool okPrice = Double.TryParse(f[2].Trim(), NumberStyles.Float, CultureInfo.InvariantCulture, out price);
    if (!okQty || !okPrice) return false;

    p = new Product { Name = name, Quantity = qty, Price = price };
    return true;
  }

  public static void Main(string[] args)
  {
    string[] lines = new string[]
    {
      "\"Orange, Blood\",12,3.4",
      "Apple,10,2.5",
      "\"He said \"\"Hi\"\"\",1,0.0"
    };

    List<Product> list = new List<Product>();
    foreach (string line in lines)
    {
      Product p;
      if (TryParseProduct(line, out p)) list.Add(p);
    }

    foreach (Product p in list)
    {
      Console.WriteLine(p.Name + " -> " + p.Quantity + " @ " + p.Price);
    }
  }
}

กฎของฟิลด์ที่มีเครื่องหมายอัญประกาศ

ตรวจสอบอย่างรวดเร็ว: จะจัดการเครื่องหมายจุลภาคภายในฟิลด์ CSV ที่อยู่ในเครื่องหมายอัญประกาศได้อย่างถูกต้องอย่างไร

สรุป

สรุป: ใช้ Split อย่างง่ายกับ CSV ที่ไม่มีเครื่องหมายอัญประกาศ แยกวิเคราะห์ตัวเลขด้วย TryParse และเปลี่ยนมาใช้ตัวสแกนที่รู้จักเครื่องหมายอัญประกาศเมื่อฟิลด์อาจมีเครื่องหมายจุลภาค

คำถามที่พบบ่อย

บทเรียน “รูปแบบการแยกวิเคราะห์ CSV อย่างง่าย” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “รูปแบบการแยกวิเคราะห์ CSV อย่างง่าย” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C# Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C# Academy มีบทเรียนทั้งหมด 3 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “รูปแบบการแยกวิเคราะห์ CSV อย่างง่าย”

แยกวิเคราะห์บรรทัด CSV: ใช้ Split แบบตรงไปตรงมากับไฟล์ง่าย ๆ ใช้ TryParse ที่ปลอดภัยกับตัวเลข แล้วสร้างตัวแยกที่รองรับเครื่องหมายอัญประกาศสำหรับจุลภาคภายในอัญประกาศ คุณปฏิบัติ C# Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C# Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C# Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 3 บทเรียน

บทเรียน “รูปแบบการแยกวิเคราะห์ CSV อย่างง่าย” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C# Academy นี้ได้ไหม

ได้ บทเรียน C# Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. System.IO (เส้นทางและสตรีม)
  2. JSON ด้วย System.Text.Json (การเลือกใช้และตัวแปลง)
  3. รูปแบบการแยกวิเคราะห์ CSV อย่างง่าย
← กลับไปที่ C# Academy