using System; using System.Collections.Generic; using System.Text; namespace Apewer.Internals { internal class CsvHelper { /// <summary>读取 .CSV 文件。</summary> public static List<List<string>> ReadCSV(string argText) { var result = new List<List<string>>(); if (string.IsNullOrEmpty(argText)) return result; var rows = argText.Split('\n'); var vramarray = new List<string[]>(); foreach (var row in rows) { var list = ResolveCSV(row); if (list.Count > 0) result.Add(list); } return result; } /// <summary>解析 .CSV 文件。</summary> private static List<string> ResolveCSV(string argRowText) { if (string.IsNullOrEmpty(argRowText)) return new List<string>(); var trim = argRowText.Trim(); if (string.IsNullOrEmpty(trim)) return new List<string>(); var list = new List<string>(); var quote = false; var cell = ""; for (int i = 0; i < argRowText.Length; i++) { var vchar = argRowText[i]; switch (vchar) { case '"': if (!quote) cell = ""; quote = !quote; break; case ',': if (quote) { cell += vchar; } else { list.Add(cell.Trim()); cell = ""; } break; default: cell += vchar; break; } } if (!string.IsNullOrEmpty(cell)) { list.Add(cell.Trim()); cell = ""; } return list; } } }