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
但您可能也不想使用正则表达式。
参见下面的代码。我正在打开一个 .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
但您可能也不想使用正则表达式。