รูปแบบการแยกวิเคราะห์ 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);
}
}
}
กฎของฟิลด์ที่มีเครื่องหมายอัญประกาศ
สรุป
สรุป: ใช้ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- System.IO (เส้นทางและสตรีม)
- JSON ด้วย System.Text.Json (การเลือกใช้และตัวแปลง)
- รูปแบบการแยกวิเคราะห์ CSV อย่างง่าย