簡體   English   中英

C# 不要用逗號分割字符串

[英]C# Do not split string on comma

我正在使用 Xamarin.Forms 創建數據收集應用程序。 此應用程序的一個特殊功能是通過 csv 導出數據。 捕獲后,使用以下方法將數據寫入文本文件:

 public void WriteToFile(string CompanyName, string Website, string FirsttName, string LastName, string JobTitle, string Phone, string Email, string Solution, string Notes, string ContactOwner, string EventName)
    {
        string path = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
        string filename = System.IO.Path.Combine(path, "Prospects.txt");
        string lineToBeAdded = string.Format("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10}", CompanyName, Website, FirsttName, LastName, JobTitle, Phone, Email, Solution, Notes, ContactOwner, EventName);
        File.AppendAllText(filename, lineToBeAdded + Environment.NewLine);


    }

我的問題是,在變量 NOTES 中,用戶在他們的描述中使用了逗號,這弄亂了 csv 的結構。

如何強制忽略此字符串中的逗號?

要在雙引號中轉義逗號扭曲每列,要轉義雙引號,請使用 2 個雙引號而不是每個:

 string lineToBeAdded = string.Format("\"{0}\",\"{1}\",\"{2}\",\"{3}\",\"{4}\",\"{5}\",\"{6}\",\"{7}\",\"{8}\",\"{9}\",\"{10}\"", 
CompanyName.Replace("\"","\"\""),
 Website.Replace("\"","\"\""),
 FirsttName.Replace("\"","\"\""),
 LastName.Replace("\"","\"\""),
 JobTitle.Replace("\"","\"\""),
 Phone.Replace("\"","\"\""),
 Email.Replace("\"","\"\""),
 Solution.Replace("\"","\"\""),
 Notes.Replace("\"","\"\""),
 ContactOwner.Replace("\"","\"\""),
 EventName.Replace("\"","\"\""));

解決方案

創建這個函數:

string GetCsvLine(params string[] fields) =>
   string.Join(",", fields.Select(x => $"\"{x.Replace("\"", "\"\"")}\""));

並像這樣調用它,替換示例代碼中初始化“lineToBeAdded”的行:

string lineToBeAdded = GetCsvLine(CompanyName, Website, FirsttName, LastName, JobTitle, Phone, Email, Solution, Notes, ContactOwner, EventName);

解釋

請參閱此處 - RFC4180 - CSV 規范:

總結:

  • 如果字段包含逗號、換行符或雙引號,則必須將其括在雙引號中。
  • 字段的任何雙引號本身都必須加倍。
  • 獎勵:使用“參數”和 LINQ 允許您使用可變數量的參數調用此方法,從而無需具有確切數量的占位符的格式字符串。

此外,您不必使用逗號,您可以使用 | 或其他用戶不使用的東西。

為了讓它更友好,你可以在第一行指定分隔符,我知道 excel 支持。

sep=|
header1|header2|header3
1,2|2,3|3,4

暫無
暫無

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

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