C# 读取CSV文件时忽略双引号之间的逗号
CSV阅读器用c语言制作。它工作正常,但我不能忽略双引号行值之间的逗号“” 例如: aa,aa,bb,cc 它读起来像C# 读取CSV文件时忽略双引号之间的逗号,c#,csv,streamreader,C#,Csv,Streamreader,CSV阅读器用c语言制作。它工作正常,但我不能忽略双引号行值之间的逗号“” 例如: aa,aa,bb,cc 它读起来像 Col1 Col2 Col3 Col4 aa aa bb cc 而不是这个,它应该是这样的 Col1 Col2 Col3 aa aabb cc 这是我的代码: public void LoadFile(String path) { Table.Rows.Clear(); Table.Columns.Clear(); Stream
Col1 Col2 Col3 Col4
aa aa bb cc
而不是这个,它应该是这样的
Col1 Col2 Col3
aa aabb cc
这是我的代码:
public void LoadFile(String path)
{
Table.Rows.Clear();
Table.Columns.Clear();
StreamReader file = File.OpenText(path);
String[] header = file.ReadLine().Split(',');
for (int i = 0; i < Table.ColumnCount; i++)
{
Table.Columns[i].Name = "Col " + i;}
String row = "";
while ((row = file.ReadLine()) != null)
{
Table.Rows.Add(row.Split(','));
}
file.Close();
}
}
您可以通过使用regex Split函数替换Split函数来解决此问题
Table.Rows.Add(row.Split(','));
应替换为
Table.Rows.AddRegex.Splitrow,?=?:[^\]*\[^\]*\*.[^\]*$
并在顶部添加部件
using System.Text.RegularExpressions;
这将解决您的问题您可以通过使用regex Split函数替换Split函数来解决此问题
Table.Rows.Add(row.Split(','));
应替换为
Table.Rows.AddRegex.Splitrow,?=?:[^\]*\[^\]*\*.[^\]*$
并在顶部添加部件
using System.Text.RegularExpressions;
这将解决你的问题
你可能想考虑找到一个第三方CVS阅读器,因为大多数人会为你处理这个问题。有很多CSV解析工具,比如CSVHelper,可以为你做所有这些事情,我可以从外部CSV阅读器中获取帮助,但是尝试添加一个条件,这样就可以工作了。我是用流阅读器做的。我正在尝试将其作为一个应用程序来工作。正如您所发现的,它比使用逗号拆分更复杂。如果要重新创建控制盘,可能需要一次读取一个字符,并设置/清除指示是否在dbl引号内的标志。有大量类似的问题等待着你。对于我自己的,非常简单的CSV解析器,我使用了一个状态机。内部的条目状态处理逗号不同于移动到下一个条目状态。你可能想考虑找到一个第三方CVS阅读器,因为大多数人会为你处理这个问题。有很多CSV解析工具,比如CSVHelper,可以为你做这些,我可以从一个外部CSV阅读器中得到帮助。但是试着添加一个条件,这样就可以工作了。我是用流阅读器做的。我正在尝试将其作为一个应用程序来工作。正如您所发现的,它比使用逗号拆分更复杂。如果要重新创建控制盘,可能需要一次读取一个字符,并设置/清除指示是否在dbl引号内的标志。有大量类似的问题等待着你。对于我自己的,非常简单的CSV解析器,我使用了一个状态机。条目状态内部处理逗号的方式不同于移动到下一个条目状态。