C# CSV 导入带有引号的列表框

C# CSV Imports Into Listbox With Quotations

参见下面的代码。我正在打开一个 .CSV 文件并将其读入列表框,而不是显示为 - X 是 Z 这是 "X" "Y" "Z"

相关代码为:

            if(ofdCSV.ShowDialog() == DialogResult.OK)
        {
            list.Visible = true;
            StreamReader sr = new StreamReader(ofdCSV.FileName);
            string currentLine;
            while ((currentLine = sr.ReadLine()) != null)
            {
                    list.Items.Add(currentLine);

            }

有什么想法吗?我已经四处寻找了一段时间,但我还是个新手,所以我什至不确定要寻找什么。

您可以尝试使用 Replace 删除引号。

list.Items.Add(currentLine.Replace('"', '').Trim());

list.Items.Add(currentLine.Replace("\"", string.Empty));;

我写了以下语句,据我所知,它可以正确地创建 CSV 数据。这里的重点是 CSV 数据可以跨越多行。希望这有帮助。

public static string Escape(string val)
{
    if (val == null)
        return "";

    while (val.EndsWith("\r\n"))
        val = val.Remove(val.Length - 2, 2);

    if (val.Contains("\t"))
        val = val.Replace("\t", "    ");

    if (val.Contains("\r\n"))
        val = val.Replace("\r\n", "\n");

    if (val.Contains("\r"))
        val = val.Replace("\r", "\n");

    if (val.Contains("\""))
        val = val.Replace("\"", "\"\"");

    if (val.Contains(",") ||
        val.Contains("\"") ||
        val.Contains("\n") ||
        val.StartsWith(" ") ||
        val.EndsWith(" "))
    {
        val = "\"" + val + "\"";
    }
    return val;
}

CSV 文件是一个常见的例子,它总是比您第一眼看到的要复杂。该过程通常始于您认为您知道 csv 文件的工作原理并编写一些简单的代码。随着您发现越来越多的边缘案例,您会逐渐积累越来越多的代码。最后阶段是最终放弃所有代码以支持第 3 方 CSV 解析器,例如 Filehelpers.

.net 框架有 TextFieldParser,如果您设置

Delimiters = new string[] { "," };
HasFieldsEnclosedInQuotes = true;

可以找到更详细的解释here。 它比使用整个其他库的开销要少,但如果你给它输入一行

它可能会失败

caltrops,"10' pole, 1" diameter",lunch

但您可能也不想使用正则表达式。