gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 22:27:50 27 4
gpt4 key购买 nike

我正在从一个 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com