c#高效有选择性的处理字符串分割的问题
C# csv String
[解决办法]
string[] lines = System.IO.File.ReadAllLines("1.csv");
var query = lines.Select(x => string.Join("\t", x.Split(' ', StringSplitOptions.RemoveEmptyEntries).Select(y => "\"" + y + "\"").ToArray()));
foreach (var item in query) Console.WriteLine(query);
[解决办法]
需要剔除那些在两个双引号之间的逗号。例如
private static IEnumerable<string> 分割(string s)
{
var t1 = 某符号的所有位置(s, ',').ToList();
var t2 = 某符号的所有位置(s, '"').ToList();
for (var i = 0; i < t2.Count; i += 2)
t1.Where(x => x > t2[i] && x < t2[i + 1])
.ToList()
.ForEach(x => t1.Remove(x));
for (int i = 0, start = 0; i < t1.Count; start = t1[i] + 1, i++)
yield return s.Substring(start, t1[i] - start);
yield return s.Substring(t1[t1.Count - 1] + 1);
}
private static IEnumerable<int> 某符号的所有位置(string s, char c)
{
var index = 0;
begin:
var pos = s.IndexOf(c, index);
if (pos < 0)
yield break;
yield return pos;
index = pos + 1;
goto begin;
}
可以试一下
var s = "1qqq,\"2d,a\",ers";
foreach (var x in 分割(s))
Console.WriteLine(x);