特定
2,1016,7 /二千○八分之三十一14:22,杰夫达尔加斯6 /二千零十一分之五22:21,http://stackoverflow.com, "科瓦利斯,OR",7679,351,81,b437f461b3fd27387c5d8ab47a293d35,34
如何使用C#将上述信息拆分为字符串,如下所示:
2
1016
7/31/2008 14:22
Geoff Dalgas
6/5/2011 22:21
http://stackoverflow.com
Corvallis, OR
7679
351
81
b437f461b3fd27387c5d8ab47a293d35
34
Run Code Online (Sandbox Code Playgroud)
如您所见,其中一列包含,<=(Corvallis,OR)
// update //基于 C#Regex Split - 引号外的逗号
string[] result = Regex.Split(samplestring, ",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");
Run Code Online (Sandbox Code Playgroud)
Tim*_*Tim 166
使用该Microsoft.VisualBasic.FileIO.TextFieldParser课程.这将处理解析分隔文件,TextReader或者Stream某些字段用引号括起来而有些字段不包含在引号中.
例如:
using Microsoft.VisualBasic.FileIO;
string csv = "2,1016,7/31/2008 14:22,Geoff Dalgas,6/5/2011 22:21,http://stackoverflow.com,\"Corvallis, OR\",7679,351,81,b437f461b3fd27387c5d8ab47a293d35,34";
TextFieldParser parser = new TextFieldParser(new StringReader(csv));
// You can also read from a file
// TextFieldParser parser = new TextFieldParser("mycsvfile.csv");
parser.HasFieldsEnclosedInQuotes = true;
parser.SetDelimiters(",");
string[] fields;
while (!parser.EndOfData)
{
fields = parser.ReadFields();
foreach (string field in fields)
{
Console.WriteLine(field);
}
}
parser.Close();
Run Code Online (Sandbox Code Playgroud)
这应该导致以下输出:
2 1016 7/31/2008 14:22 Geoff Dalgas 6/5/2011 22:21 http://stackoverflow.com Corvallis, OR 7679 351 81 b437f461b3fd27387c5d8ab47a293d35 34
有关更多信息,请参阅Microsoft.VisualBasic.FileIO.TextFieldParser.
您需要Microsoft.VisualBasic在"添加引用.NET"选项卡中添加引用.
小智 28
这太晚了,但这对某人有帮助.我们可以使用RegEx如下.
Regex CSVParser = new Regex(",(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))");
String[] Fields = CSVParser.Split(Test);
Run Code Online (Sandbox Code Playgroud)
您可以拆分所有逗号后面都有偶数引号的逗号.
您还希望以specfCSV格式查看有关处理逗号的信息.
有用的链接: C# Regex Split - commas outside quotes
我看到如果您在 Excel 中粘贴 csv 分隔文本并执行“文本到列”,它会要求您输入“文本限定符”。它默认为双引号,因此它将双引号内的文本视为文字。我想象 Excel 通过一次一个字符来实现这一点,如果遇到“文本限定符”,它会继续转到下一个“限定符”。您可以自己使用 for 循环和布尔值来实现它,以表示您是否在文字文本中。
public string[] CsvParser(string csvText)
{
List<string> tokens = new List<string>();
int last = -1;
int current = 0;
bool inText = false;
while(current < csvText.Length)
{
switch(csvText[current])
{
case '"':
inText = !inText; break;
case ',':
if (!inText)
{
tokens.Add(csvText.Substring(last + 1, (current - last)).Trim(' ', ','));
last = current;
}
break;
default:
break;
}
current++;
}
if (last != csvText.Length - 1)
{
tokens.Add(csvText.Substring(last+1).Trim());
}
return tokens.ToArray();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
77455 次 |
| 最近记录: |