2012-06-11 4 views
1

Matlab에서 oracle 데이터 공급자를 사용하여 oracle 데이터베이스를 쿼리하고 있습니다. 결과와 함께 matlab 매트릭스 또는 2D 배열을 채우고 싶습니다. 저는 .NET 사용자이지만 Matlab에서는 강력하지 않습니다. 우리에게는 Matlab을 사용하는 애널리스트가 있지만 .NET에 대해서는 전혀 모르기 때문에 우리는 일종의 걸림돌입니다. 우리는 Matlab 데이터베이스 툴킷을위한 2k를 배제하고 싶지 않습니다. 그래서 우리는 .NET을 사용하여 Matlab에서 데이터베이스를 쿼리합니다..NET DataTable to Matlab matrix

모든 아이디어를 쉽게 matlab에서 행렬 또는 2D 배열로 .NET에서 datatable로 변환 할 수 있습니까? 우리는 ODP.NET을 사용하고 있으므로 일반 ADO.NET GetRows()는 존재하지 않습니다. 이것이 오라클을 위해 MS의 OLE를 사용하고 있지만 PC의 Win 7 64 비트이고 MS가 해당 플랫폼에서 더 이상 오라클을 지원하지 않는다면 사용하겠다. 오라클 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 = 0 (rowCount, colCount)을하고 있었다; 그러나 이것이 숫자를 기대하는 것 같습니다. 숫자와 문자열을 모두 잡고 사용자가 수학을하기 원하는 열을 알아낼 수있게하려고합니다.

답변

1

이 줄은 문제가있다 :

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

대신 테스트 typeSystem.String에 해당된다는, 그것은 'System.String' == 1type와 같은 문자열이 있는지 여부를 확인합니다.

나는,

isequal(type,'System.String'); 

또는 더 나은로 변경 제안 당신의 코드 라인을 절약 할 수 있기 때문에, if-elseifswitch을 선호 :

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 

스위치가 문자열 인수를 처리 할 수 ​​있기 때문에이 문제가 발생을하고, 그들을 정확하게 비교하십시오.