簡體   English   中英

在 C# 中拆分逗號分隔值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM