假设我有这个CSV文件:
NAME,ADDRESS,DATE
"Eko S. Wibowo", "Tamanan, Banguntapan, Bantul, DIY", "6/27/1979"
Run Code Online (Sandbox Code Playgroud)
我想将使用双引号括起来的每个令牌存储在一个数组中,是否可以安全地执行此操作而不是使用String split()函数?目前我在RichTextBox中加载文件,然后使用其Lines []属性,我为每个Lines []元素执行循环并执行以下操作:
string[] line = s.Split(',');
Run Code Online (Sandbox Code Playgroud)
s是对RichTextBox.Lines []的引用.而且你可以清楚地看到,令牌内的逗号很容易搞乱split()函数.所以,不是以我想要的三个令牌结束,而是以6个令牌结束
任何帮助将不胜感激!
unl*_*mit 22
你也可以使用正则表达式:
string input = "\"Eko S. Wibowo\", \"Tamanan, Banguntapan, Bantul, DIY\", \"6/27/1979\"";
string pattern = @"""\s*,\s*""";
// input.Substring(1, input.Length - 2) removes the first and last " from the string
string[] tokens = System.Text.RegularExpressions.Regex.Split(
input.Substring(1, input.Length - 2), pattern);
Run Code Online (Sandbox Code Playgroud)
这会给你:
Eko S. Wibowo
Tamanan, Banguntapan, Bantul, DIY
6/27/1979
Run Code Online (Sandbox Code Playgroud)
我用自己的方法完成了这个.它只计算"
和'
字符的数量.
根据您的需求改进这一点.
public List<string> SplitCsvLine(string s) {
int i;
int a = 0;
int count = 0;
List<string> str = new List<string>();
for (i = 0; i < s.Length; i++) {
switch (s[i]) {
case ',':
if ((count & 1) == 0) {
str.Add(s.Substring(a, i - a));
a = i + 1;
}
break;
case '"':
case '\'': count++; break;
}
}
str.Add(s.Substring(a));
return str;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
28979 次 |
最近记录: |