我使用以下代码从csv文件中获取数据:
public DataTable GetCSVData(string CSVFileName)
{
string CSVConnectionString = "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" + ConfigurationSettings.AppSettings["CSVFolder"].ToString() + ";Extensions=asc,csv,tab,txt;Persist Security Info=False;";
using (OdbcConnection Connection = new OdbcConnection(CSVConnectionString))
{
DataTable CSVDataTable = new DataTable();
string SelectQuery = string.Format(@"SELECT * FROM [{0}]", CSVFileName);
OdbcDataAdapter Adapter = new OdbcDataAdapter(SelectQuery, Connection);
Adapter.Fill(CSVDataTable);
return CSVDataTable;
}
}
确切的问题是,如果csv列包含以粗体字母突出显示的数据,请在下面的第1行中显示
Row1-> col1,“cdwdf”dsdfs ,col2,col3
使用上面的代码获取数据时跳过col2和col3(突出显示的文本后面的列),然后继续从下一行获取数据。
如果Row1中提到的列文本完全在引号内(“cdwdf dsdfs”),则可以正确获取数据。
任何人请告诉我如何在这种情况下从csv获取数据......
答案 0 :(得分:2)
我会使用Fast CSV Reader,因为它非常快速且擅长识别csv文件结构。
答案 1 :(得分:2)
双引号是csv specification的一部分。如果您的数据包含双引号,则整个字段(或列)必须用双引号括起来,并且必须使用双引号对字段内的任何双引号进行转义。
所以你的行应该是这样的:
Row1-> col1,"""cdwdf"" dsdfs",col2,col3
我没有使用任何CSV库,所以我不推荐任何,但你可以自己轻松地解析文件。只需逐行读取文件并按','拆分。这个问题是跨越多行的字段....
编辑:总而言之,您需要修改CSV输入文件或找到更宽容的解析器,或者在发现格式错误的CSV记录时至少会抛出异常。乍一看,FAST CSV reader其他人提出的建议似乎是一个很好的起点,因为它声称格式错误的CSV会导致其失败并出现有意义的异常。