【问题标题】:.NET DataTable to Matlab matrix.NET DataTable 到 Matlab 矩阵
【发布时间】:2012-06-11 18:46:00
【问题描述】:

在 Matlab 中,我使用 oracles 数据提供程序来查询 oracle 数据库。我想用结果填充一个 matlab 矩阵或二维数组。我是一个 .NET 人,但在 Matlab 中并不强。我们有使用 Matlab 但对 .NET 一无所知的分析师,因此我们陷入了困境。我们不想为他们拥有的 Matlab 数据库工具包提供 2k 的费用,所以这就是我们使用 .NET 从 Matlab 查询数据库的原因。

任何想法如何在 matlab 中轻松地将数据表从 .NET 转换为矩阵或二维数组?请注意,我们使用的是 ODP.NET,因此不存在正常的 ADO.NET GetRows()。如果我们将 MS 的 OLE 用于 oracle,但 PC 是 Win 7 64 位并且 MS 在该平台上不再支持 oracle,这就是我将使用的。您必须使用 oracles ODP,这就是我们正在使用的。使用其他任何东西都不是 atm 的选项,因此解决方案需要牢记这一点。

目前我能够查询数据库,并遍历每一行/列,但在添加到矩阵时遇到问题。即因为我需要将数字或字符串都存储在矩阵中,并且在遍历每一列时我得到了转换类型,但由于某种原因 strcmp() 没有返回匹配项,即使它看起来应该:

for r = 1:rowCount
    for c = 1:colCount
        type = tbl.Rows.Item(r).Item(c).GetType().ToString();
        val = tbl.Rows.Item(r).Item(c);
        if strcmp(type,'System.Decimal') == 1
            m(r, c) = tbl.Rows.Item(r).Item(c).ToDouble();
        elseif strcmp(type, 'System.String' == 1) || strcmp(type, 'System.DateTime' == 1)
            m(r, c) = tbl.Rows.Item(r).Item(c).ToString();
        end
        m(r, c) = tbl.Rows.Item(r).Item(c).ToString();
    end
end

考虑到这一点,如何让矩阵或二维数组接受任何类型的数据?如果你愿意的话,一个变种。我在做 m = zeros(rowCount, colCount);但这似乎使它期望数字,这是有道理的,但我仍然希望同时保存数字和字符串,并让用户找出他们希望对其进行数学运算的列。

【问题讨论】:

    标签: .net oracle matlab


    【解决方案1】:

    这行有问题:

     strcmp(type, 'System.String' == 1)
    

    它不是测试type 是否等于System.String,而是检查'System.String' == 1 是否与type 相同。

    我建议改成

     isequal(type,'System.String');
    

    或者更好的是,更喜欢switch 而不是if-elseif,因为它可以节省你的代码行数:

      switch type
        case 'System.Decimal'
            m(r, c) = tbl.Rows.Item(r).Item(c).ToDouble();
        case {'System.String', 'System.DateTime')
            m(r, c) = tbl.Rows.Item(r).Item(c).ToString();
        otherwise
            assert(false);
        end
    

    这是因为 switch 可以处理字符串参数,并正确比较它们。

    【讨论】:

      猜你喜欢
      • 2015-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-08
      • 2014-01-02
      • 1970-01-01
      • 2022-08-18
      相关资源
      最近更新 更多