/// <summary>
/// 读åcsvæ件å°DataTable
/// </summary>
/// <param name="filepath"></param>
/// <returns></returns>
static private DataTable ReadCsv(string filepath)
{
DataTable dt = new DataTable("NewTable");
DataRow row;
string[] lines = File.ReadAllLines(filepath, Encoding.UTF8);
string[] head = lines[0].Split(',');
int cnt = head.Length;
for (int i = 0; i < cnt; i++)
{
dt.Columns.Add(head[i]);
}
for (int i = 0; i < lines.Length; i++)
{
lines[i].Trim();
if ((string.IsNullOrWhiteSpace(lines[i])))
{
continue;
}
try
{
row = dt.NewRow();
row.ItemArray = GetRow(lines[i], cnt);
dt.Rows.Add(row);
}
catch { }
}
return dt;
}
/// <summary>
/// 解æå符串 è·å 该è¡çæ°æ® å·²ç»å¤ç,å"å·
/// </summary>
/// <param name="line">该è¡çå
容</param>
/// <param name="cnt">æ»çæ¡ç®æ°</param>
/// <returns></returns>
static private string[] GetRow(string line, int cnt)
{
//line = line.Replace("\"\"", "\""); //è¥ç©ºæ°æ®å å¼å·æ¿æ¢ä¸æ£ç¡®
string[] strs = line.Split(',');
if (strs.Length == cnt)
{
return RemoveQuotes(strs);
}
List<string> list = new List<string>();
int n = 0, begin = 0;
bool flag = false;
for (int i = 0; i < strs.Length; i++)
{
//没æå¼å· æè
ä¸é´æå¼å· ç´æ¥æ·»å
if (strs[i].IndexOf("\"") == -1
|| (flag == false && strs[i][0] != '\"'))
{
list.Add(strs[i]);
continue;
}
//å
¶å®æå¼å·ï¼ä½è¯¥æ®µæ²¡æ,å·ï¼ç´æ¥æ·»å
n = 0;
foreach (char ch in strs[i])
{
if (ch == '\"')
{
n++;
}
}
if (n % 2 == 0)
{
list.Add(strs[i]);
continue;
}
//该段æå¼å· æ ,å·ï¼ä¸ä¸æ®µå¢å åæ·»å
flag = true;
begin = i;
i++;
for (i = begin + 1; i < strs.Length; i++)
{
foreach (char ch in strs[i])
{
if (ch == '\"')
{
n++;
}
}
if (strs[i][strs[i].Length - 1] == '\"' && n % 2 == 0)
{
StringBuilder sb = new StringBuilder();
for (; begin <= i; begin++)
{
sb.Append(strs[begin]);
if (begin != i)
{
sb.Append(",");
}
}
list.Add(sb.ToString());
break;
}
}
}
return RemoveQuotes(list.ToArray());
}
/// <summary>
/// å°è§£æçæ°æ® å»é¤å¤ä½çå¼å·
/// </summary>
/// <param name="strs"></param>
/// <returns></returns>
static string[] RemoveQuotes(string[] strs)
{
for (int i = 0; i < strs.Length; i++)
{
//è¥è¯¥é¡¹æ°æ®ä¸ºç©º ä½csvæ件ä¸å ä¸åå¼å·
if (strs[i] == "\"\"")
{
strs[i] = "";
continue;
}
//è¥è¯¥é¡¹æ°æ®å¤´åå°¾å ä¸å¼å·
if (strs[i].Length > 2 && strs[i][0] == '\"' && strs[i][strs[i].Length - 1] == '\"')
{
strs[i] = strs[i].Substring(1, strs[i].Length - 2);
}
//è¥è¯¥é¡¹æ°æ®ä¸é´æå¼å·
strs[i] = strs[i].Replace("\"\"", "\"");
}
return strs;
}
温馨提示:答案为网友推荐,仅供参考