1

Matlab では、oracles データ プロバイダーを使用して oracle データベースにクエリを実行しています。結果を matlab 行列または 2D 配列に入力したいと考えています。私は .NET 派ですが、Matlab は苦手です。Matlab を使用しているアナリストがいますが、.NET については何も知らないため、行き詰まっています。彼らが持っている Matlab データベース ツールキットに 2k を使いたくないので、.NET を使用して Matlab からデータベースにクエリを実行しています。

データテーブルを.NETからmatlabのマトリックスまたは2D配列に簡単に変換する方法はありますか? ODP.NET を使用しているため、通常の ADO.NET GetRows() が存在しないことに注意してください。これは、MS の OLE for Oracle を使用しているが、PC が Win 7 64 ビットであり、MS がそのプラットフォームで Oracle をサポートしていない場合に使用するものです。オラクル ODP を使用する必要があるため、それを使用しています。他のものを使用することはオプションではないため、ソリューションはそれを念頭に置く必要があります。

現在、データベースにクエリを実行し、各行/列をループ処理できますが、マトリックスへの追加に問題があります。つまり、数値または文字列の両方をマトリックスに格納する必要があり、各列をループしている間に変換用の型を取得していますが、何らかの理由で 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

これを念頭に置いて、マトリックスまたは 2D 配列に任意のタイプのデータを受け入れるようにするにはどうすればよいでしょうか? 必要に応じてバリアント。私はやっていた m = zeros(rowCount, colCount); しかし、これは数字を期待しているように見えますが、これは理にかなっていますが、それでも数字と文字列の両方を保持し、ユーザーが計算したい列を把握できるようにしたいと考えています。

4

1 に答える 1

1

この行には問題があります:

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

typeが と等しいかどうかをテストする代わりに、が と同じ文字列System.Stringかどうかをチェックします。'System.String' == 1type

に変更することを提案します

 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 が文字列引数を処理し、それらを正しく比較できるために発生します。

于 2012-06-11T18:53:50.273 に答える