你如何将此行拆分为字符串数组?
问题是Rutois,a。 ,所以你不能直接拆分','
分隔符..
543472,"36743721","Rutois, a.s.","151","some name","01341",55,"112",1
感谢
答案 0 :(得分:7)
我建议您使用CSV解析器而不是rolling your own。
FileHelpers是一个很好的图书馆。
答案 1 :(得分:6)
您可以使用正则表达式从行中选择值:
string line ="543472,\"36743721\",\"Rutois, a.s.\",\"151\",\"some name\",\"01341\",55,\"112\",1";
var values = Regex.Matches(line, "(?:\"(?<m>[^\"]*)\")|(?<m>[^,]+)");
foreach (Match value in values) {
Console.WriteLine(value.Groups["m"].Value);
}
输出:
543472
36743721
Rutois, a.s.
151
some name
01341
55
112
1
这当然假设您实际上已经在字符串中获得了完整的CSV记录。请注意,CSV记录中的值可以包含换行符,因此只能通过在换行符上拆分来从CSV文件中获取记录。
答案 2 :(得分:1)
答案 3 :(得分:0)
我猜你想要这样的东西 -
string csv = 543472,"36743721","Rutois, a.s.","151","some name","01341",55,"112",1 ;
string[] values;
values = csv.Split(",");
for(int i = 0; i<values.Length; i++)
{
values[i] = values[i].Replace("\"", "");
}
希望这有帮助。
答案 4 :(得分:0)
我很想换出引用字符串中出现的引号,然后使用split。这会奏效。
string csv = "543472,\"36743721\",\"Rutois, a.s.\",\"151\",\"some name\",\"01341\",55,\"112\",1";
const string COMMA_TOKEN = "[COMMA]";
string[] values;
bool inQuotes = false;
StringBuilder cleanedCsv = new StringBuilder();
foreach (char c in csv)
{
if (c == '\"')
inQuotes = !inQuotes; //work out if inside a quoted string or not
else
{
//Replace commas in quotes with a token
if (inQuotes && c == ',')
cleanedCsv.Append(COMMA_TOKEN);
else
cleanedCsv.Append(c);
}
}
values = cleanedCsv.ToString().Split(',');
//Put the commas back
for (int i = 0; i < values.Length; i++)
values[i] = values[i].Replace(COMMA_TOKEN, ",");
答案 5 :(得分:0)
如果第一个字符是引号,则其他RegEx答案将失败。
这是正确的正则表达式:
string[] columns = Regex.Split(inputRow, ",(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))");