簡體   English   中英

c#逗號分隔字符串到列表

[英]c# comma separated string to list

我已經看到了一些使用Split(',')處理逗號分隔列表的示例,其中包含以下字符串:

string csv = "1,2,3,4,a,5";
List<string> parts = csv.Split(',').ToList<string>();

但是會發生什么,以及如何處理這樣的CSV字符串:

string csv = '"a,b","c,d","e","f",g,h,i';

我希望能夠將csv字符串解析為列表或數組,它更多的是知道處理包含逗號的字符串元素的最佳方法,而不是像Split這樣的簡單解析器來混淆額外的逗號。

阿列克謝的評論很有幫助,但在我的現實生活中嘗試它之后,他的解決方案陷入了一些障礙......所以需要額外的功勞..這是一個需要解析的更准確的csv字符串。

csv = '"name 1" <title 1>, "name, 2" <title 2>, name 3 <title 3>, name 4 <title 4>, name 5, name 6';

這些值將分為:

"name 1" <title 1>
"name, 2" <title 2> 
name 3 <title 3>
name 4 <title 4> 
name 5
name 6

謝謝

使用正則表達式來做到這一點。 這是最快捷,最簡單的方式。 確保將System.Text.RegularExpressions添加到引用中。 將單引號和雙引號作為特殊字符,將它們刪除。 有關詳細信息,請參閱此帖

正則表達式刪除特殊字符

第二個字符串的普通C#解決方案。 它假定它是一個有效的CSV,令牌之間沒有空格。 我不認為它是最快的,但它應該足夠合理大小的數組(~MB)。 復雜性是O(n)

private static void AddToBuilder(IList<string> parts, StringBuilder sb)
{
    if (sb.Length > 0)
        parts.Add(sb.ToString());

    sb.Clear();
}

static void Main(string[] args)
{
    string csv = "\"a,b\",\"c,d\",\"e\",\"f\",g,h,i";
    var parts = new List<string>();
    bool innerString = false;
    var sb = new StringBuilder();
    foreach (var c in csv)
    {
        if (c == '\"')
        {
            if (innerString)
                AddToBuilder(parts, sb);

            innerString = !innerString;
            continue;
        }

        if (c == ',' && !innerString)
        {
            AddToBuilder(parts, sb);
            continue;
        }

        sb.Append(c);
    }

    AddToBuilder(parts, sb);

如果第三方CSV解析器不是一個選項,另一種選擇是Microsoft.VisualBasic.FileIO.TextFieldParser (需要參考Microsoft.VisualBasic ):

string CSV = "\"a,b\",\"c,d\",\"e\",\"f\",g,h,i";
string[] fields;

using (var sr = new System.IO.StringReader(CSV))  
using (var tfp = new Microsoft.VisualBasic.FileIO.TextFieldParser(sr)) {
    tfp.SetDelimiters(",");
    fields = tfp.ReadFields();
}

它還處理包含正確轉義引號的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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