【问题标题】:DataColumn in DataTable not found by name未按名称找到 DataTable 中的 DataColumn
【发布时间】:2019-03-17 10:24:14
【问题描述】:

我正在读取第一行是标题行的 CSV 文件。读取所有列名并将其放入如下表中:

foreach (var item in lines[0].Split(';').Where(s => !string.IsNullOrEmpty(s)))
        {
            table.Columns.Add(item.Trim(), typeof(string));
        }

一切都正确无误,除非我再次尝试从表格中读取。 大多数列都被读取,除了一列。

我尝试调试并为此列编写消息,但它没有进入该函数(见下图)。 (if 语句返回 false)

我现在什么都试过了,包括检查桌子上的语言环境。

标题行:

document title;DocRef;DocRevNo;DocRevDt;RevisionObject;TransRef;Trans Status;DocOrigin;DocRefClient;RespActualDt;First TransDate;Last Update

编辑:

我发现第一个字节很奇怪...

[0]: 65279 ''
[1]: 100 'd'
[2]: 111 'o'
[3]: 99 'c'
[4]: 117 'u'
[5]: 109 'm'
[6]: 101 'e'
[7]: 110 'n'
[8]: 116 't'
[9]: 32 ' '
[10]: 116 't'
[11]: 105 'i'
[12]: 116 't'
[13]: 108 'l'
[14]: 101 'e'

任何知道如何删除该字节(如果存在)的人?

【问题讨论】:

  • 你能从 csv 中添加第一行吗?
  • 我在 LinqPad 中重复了您的代码。一切都对我有用。您是否尝试查看每个 ColumnName?我的意思是该列存在吗?有时我遇到了这个错误。但就我而言,这是一个字母,但使用不同的语言。 F.e.英文字母“c”和俄语字母“с”看起来一样,但字母不同。
  • 非常好。来源来自法国,我是挪威文化...初步测试并没有解决它,但我会调查更多...

标签: c# datatable datacolumn


【解决方案1】:

这里是解决方案。 该行的开头包含一个隐藏字符 (65279)。通过这个函数运行文本,它消除了问题:

    protected string CleanInput(string input)
    {
        var imp = (input ?? "");
        var removeChars = new Char[] { (Char)65279 };
        imp = new String(imp.ToCharArray().Where(c => !removeChars.Contains(c)).ToArray());
        return imp;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-12
    • 1970-01-01
    • 2015-04-08
    • 2016-02-09
    • 2019-01-11
    • 2021-05-17
    • 1970-01-01
    • 2012-07-02
    相关资源
    最近更新 更多