2013-05-29 61 views
0

我有一個名爲「mat.mat」的工作區,我必須通過控制檯應用程序將變量名稱下載到C#中。我有一個問題,當我有struct中的變量列表時,我嘗試使用GetWorkspaceDataGetCharArray並且什麼也沒得到。我的代碼:將變量從Matlab的工作區下載到C#

 MLApp.MLApp matlab = new MLApp.MLApp();    
     string loadCommand = @"zmienne=load('C:\myPath\mat.mat')"; 
     matlab.Execute(loadCommand); 

完成。

+0

你的技術是否適用於常規變量(字符串,雙精度,矩陣...)?你如何嘗試訪問你讀回的變量? C#在訪問它們之前不需要知道數據結構?在「這裏是我所嘗試的」的幾行代碼會有所幫助。 – Floris

+0

是的,它適用於對數變量,但它不適用於結構。這是我第一次與Matlab和C#一起工作。到目前爲止,我沒有任何問題,直到我必須以某種方式將Matlab的結構轉換爲C#,我不知道如何做到這一點。 – Shafter

+0

您是否閱讀過Mathworks網站上的一些相關文章?你可以從http://www.mathworks.com/help/matlab/matlab_external/working-with-structures.html開始。在編譯之前,如果不知道結構的細節,可能很難(如果C#工作的話)這樣做。你希望如何訪問數據? – Floris

回答

3

COM interface不是support結構或稀疏數組。我的意思是,你不能直接傳遞這些MATLAB和.NET之間,如果你嘗試你在MATLAB命令窗口打印以下錯誤:

警告:的ActiveX - 無效的參數類型或值

解決方法是訪問MATLAB端結構的字段,並將每個字段存儲在一個變量中,該變量可以使用支持的轉換規則之一封送回C#。

下面是一個例子:

static void Main(string[] args) 
{ 
    // load MAT-file contents into a structure variable 
    matlab.Execute("S = load('wind.mat')"); 

    // get field and store in separate variable 
    matlab.Execute("x = S.x;"); 

    // obtain variable "x" from MATLAB into C# 
    var x = (double[,,]) matlab.GetVariable("x", "base"); 

    // print array in C# 
    Console.WriteLine("ndims(x) = {0}, numel(x) = {1}", x.Rank, x.Length); 
    for (int i = 0; i < x.GetLength(0); i++) 
    { 
     for (int j = 0; j < x.GetLength(1); j++) 
     { 
      for (int k = 0; k < x.GetLength(2); k++) 
      { 
       Console.WriteLine("x[{0},{1},{2}] = {3}", i, j, k, x[i,j,k]); 
      } 
     } 
    } 
} 

在上面的例子中,使用的MAT-文件包含一堆double類型的多維矩陣:

>> whos -file wind.mat 
    Name  Size    Bytes Class  Attributes 

    u   35x41x15   172200 double    
    v   35x41x15   172200 double    
    w   35x41x15   172200 double    
    x   35x41x15   172200 double    
    y   35x41x15   172200 double    
    z   35x41x15   172200 double    

要注意的事當然,當你有一個帶有輸出參數的MAT文件時,它將返回一個結構whos字段,該結構是存儲在該文件中的變量:

>> S = load('wind.mat') 
S = 
    u: [35x41x15 double] 
    v: [35x41x15 double] 
    w: [35x41x15 double] 
    x: [35x41x15 double] 
    y: [35x41x15 double] 
    z: [35x41x15 double] 

因此,您可以在不指定輸出的情況下加載文件,這樣變量就可以直接加載爲單獨的文件。

相關問題