[英]Split comma-separated values in C#
我正在使用 C#。 我有一個字符串"1,2-Benzene-d4",36925,10.483,0.95,,
預期的字符串數組是,
str[0] = "1,2-Benzene-d4"
str[1] = 36925
str[2] = 10.483
str[3] = 0.95
str[4] =
我嘗試使用以下函數實現拆分,其中 mystring 是輸入字符串分隔符是 (,)
public static string[] SplitDelimitedText(string myString, string delimiter, out int numberOfFields)
{
string strDelimiter = "\"" + delimiter;
string[] strSeperator = null;
//string[] arrayOfFields = new string[numberOfFields+1];
List<string> arrayOfFields = new List<string>();
try
{
if (!string.IsNullOrEmpty(myString))
{
if (myString.StartsWith("\""))
{
strSeperator = new string[1];
strSeperator[0] = strDelimiter;
}
else
{
strSeperator = new string[2];
strSeperator[0] = strDelimiter;
strSeperator[1] = delimiter;
}
string[] arrayOfSplitString = myString.Split(strSeperator, StringSplitOptions.None);
arrayOfFields.Add("");
for (int iCount = 0; iCount < arrayOfSplitString.Length; iCount++)
{
arrayOfFields.Add(arrayOfSplitString[iCount].Replace("\"", "").Trim());
}
numberOfFields = arrayOfSplitString.Length;
}
else
numberOfFields = 0;
}
catch
{
throw;
}
return arrayOfFields.ToArray();
}
正如 ed 在評論中回答的那樣,您可以通過在構造函數中傳遞字符串來使用 TextFieldParser 類。
另一種方法是使用正則表達式來解決它。 下面是一個例子:
String inputStr = "\"1,2 - Benzene - d4\",36925,10.483,0.95,,";
String pattern = "\"[^\"]*\"|[^,]+";
Regex regex = new Regex(pattern);
Match match = regex.Match(inputStr);
while (match.Success)
{
Console.WriteLine("Found: {0}", match.Groups[0].Value);
match = match.NextMatch();
}
正則表達式是要走的路。 試試這個NetFiddle
using System;
using System.Text.RegularExpressions;
public class Program
{
public static void Main()
{
var input ="\"1,2-Benzene-d4\",36925,10.483,0.95,,";
//Define pattern
Regex CSVParser = new Regex(",(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))");
//Separating columns to array
string[] X = CSVParser.Split(input);
for (int i=0;i<X.Length;i++)
Console.WriteLine("{0}: {1}\n",i,X[i]);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.