c# - 处理从 CSV 导入的引号

标签 c# mysql excel csv delimiter

我正在从一个 CSV 文件中导入大约 30000 行,但是当用户输入引号时我在导入时遇到了问题。当用户输入逗号(我使用逗号作为分隔符)时,我已经遇到了问题,但现在我遇到了一个更大的问题,一个我似乎找不到的问题。

这是我目前使用的;

IEnumerable<string> fields = row.ItemArray.Select((field, index) => (dataTable.Columns[index].DataType == _datetype) ? ((DateTime)field).ToString("yyyy-MM-dd") :
(field.ToString().Contains(",") ? "\"" + field.ToString() + "\"" : field.ToString()));
sb.AppendLine(string.Join(",", fields));

该列(在 notepad++ 中)如下所示;

"DIY Test, Test"

但是当我在 MySQL 中打开表时,它是这样导入的;

DIY Test, Test"

I.E 它现在缺少引号。然后这会弄乱导入,并且列最终会到处都是!我认为这与我处理逗号和引号的方式有关,我怎样才能避免这种情况呢?

FoxPro 文件中的原始文本看起来很像;

DIY 测试,测试

没有引号!只是逗号。我的类使用 MySQLBulkLoader 如下所示;

    public void WriteToMySQL(string mySqlTable)
    {
        MySqlConnection mysqlCon = new MySqlConnection(mysqlConstr);
        mysqlCon.Open();
        string tempCsvFileSpec = @"C:\Users\DanD\Desktop\test.csv";
        var msbl = new MySqlBulkLoader(mysqlCon);
        msbl.TableName = "sdcdatabase." + mySqlTable;
        msbl.NumberOfLinesToSkip = 1;
        msbl.FileName = tempCsvFileSpec;
        msbl.FieldTerminator = ",";
        msbl.FieldQuotationCharacter = '"';
        msbl.Load();
        File.Delete(tempCsvFileSpec);
    }

像这样使用 FieldTerminatorFieldQuotationCharacter 是错误的吗?

编辑:为 Danny 添加了整行;

21,630,459,462,0,Test                         ,1996-08-02,14:45:04  ,2,Test   ,"DIY Test, Test                                                                       "

最佳答案

另一个选项是 CSV 导入器,它内置于 .NET 中的 Microsoft.VisualBasic.FileIO 命名空间中,名为 TextFieldParser。它的代码可以正确处理列内容周围的引号。

关于c# - 处理从 CSV 导入的引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34724336/

相关文章:

c++ - 使用 C++ 写入 Excel 文件

excel - 任务计划程序正在运行但未完成或正常工作 VBscript

php - 在 PHP 和 MySQL 方面需要帮助

php - 我想接收来自特定位置的邮件

c# - 没有状态栏的 Window.Current.Bounds 高度,每个方向

c# - 是否可以使用多行#warning 指令?

php - 如何生成 Joomla 密码?

python - 使用pandas过滤excel数据时出现KeyError

c# - Socket.Select 返回错误 "An operation was attempted on something that is not a socket"

c# - EF SaveChanges 优化?