取CSV一行中的各列
public List<string> GetColumnsInRow(string row, char fieldDelimiter, char columnDelimiter)
{
List<string> result = new List<string>();
string str = row;
StringBuilder sb = new StringBuilder();
bool startWithFieldDelimiter = false;
bool jumpThis = false;
bool matchOver = false;
int length = str.Length;
for (int i = 0; i < str.Length; i++)
{
if (i == 0)
{
if (str[i].Equals(fieldDelimiter))
{
startWithFieldDelimiter = true;
matchOver = false;
jumpThis = true;
}
else if (str[i].Equals(columnDelimiter))
{
sb.Append("");
matchOver = true;
jumpThis = true;
}
else
{
matchOver = false;
jumpThis = false;
}
}
else
{
#region fieldDelimiter
if (str[i].Equals(fieldDelimiter))
{
if (startWithFieldDelimiter)
{
if (i + 1 < length)
{
if (str[i + 1].Equals(columnDelimiter))
{
matchOver = true;
jumpThis = true;
startWithFieldDelimiter = false;
}
else
{
matchOver = false;
jumpThis = false;
}
}
else
{
matchOver = true;
jumpThis = true;
startWithFieldDelimiter = false;
}
}
else
{
if (str[i - 1].Equals(columnDelimiter))
{
startWithFieldDelimiter = true;
jumpThis = true;
matchOver = false;
}
else
{
matchOver = false;
jumpThis = false;
}
}
}
#endregion
#region column delimiter
else if (str[i].Equals(columnDelimiter))
{
if (startWithFieldDelimiter)
{
matchOver = false;
jumpThis = false;
}
else
{
if (str[i - 1].Equals(columnDelimiter))
{
sb.Append("");
}
else if (sb.Length == 0)
{
continue;
}
matchOver = true;
jumpThis = true;
}
}
else
{
matchOver = false;
jumpThis = false;
}
#endregion
}
if (i == length - 1 && matchOver == false)
{
if (!str[i].Equals(columnDelimiter) || (str[i].Equals(fieldDelimiter) && startWithFieldDelimiter == false))
{
sb.Append(str[i].ToString());
if (startWithFieldDelimiter)
sb.Insert(0, fieldDelimiter.ToString());
}
matchOver = true;
}
if (matchOver)
{
result.Add(sb.ToString());
sb.Remove(0, sb.Length);
matchOver = false;
startWithFieldDelimiter = false;
}
if (jumpThis)
continue;
else
sb.Append(str[i].ToString());
}
return result;
}