📄 matlabimportdlg.h
字号:
if(!strRet.IsEmpty())
return 0;
int nRet = AddMatlabDoubleArray(wks, strMatLabVarName, bReplaceCurrent);
strExecute.Format("%s=%s;"
"clear %s;",strMatLabVarName,STR_TEMP_ARRAY_NAME,STR_TEMP_ARRAY_NAME);
strRet = m_mlObj.Execute(strExecute);
return nRet;
}
//------- end Soapy 8/12/03
BOOL GetMatlabComplexMatrices( StringArray &asNames, string& strResult )
{
for(int ii = 0; ii < asNames.GetSize(); ii++)
{
MatrixLayer mlay_r, mlay_i;
bool bNewR= get_Origin_matrix(asNames[ii]+"r", mlay_r);
bool bNewI= get_Origin_matrix(asNames[ii]+"i", mlay_i);
Matrix<double> mr(mlay_r), mi(mlay_i);
if(!m_mlObj.GetMatrix(asNames[ii], &mr, &mi))
{
if(bNewR)
mlay_r.Destroy();
if(bNewI)
mlay_i.Destroy();
strResult += asNames[ii] + " ";
}
}
if(!strResult.IsEmpty())
strResult += ": matrices not found in Matlab!";
return TRUE;
}
//end this three functions are the CPY code from MatlabConsole.c
////////////////////////////////////////////////////////////////
int FillTheGridWithData()
{
int iRet = 0;
string strRet = m_mlObj.Execute("whos;");
_DBSTR( strRet )
if( -1 == strRet.Find("???") )
{
//use strRet's whos output to get the list of variables:
// Name Size Bytes Class
//
// b 1x1 16 double array (complex)
// t 1x1 478 struct array
// very_very_very_long_name 1x5 10 char array
// w 2x3 600 cell array
// x 2x3 48 double array
// y 2x3 48 double array
// z 1x5 10 char array
//
//Grand total is 54 elements using 1194 bytes
//Object vsFlx = VSFLEX_GRID;
//Object vsFlx = m_vsFlex;
m_vsFlex.SetupTheGrid(); //delete all but headers
if ( strRet.IsEmpty() )
return iRet;
StringArray strLines;
int lll = strRet.GetTokens( strLines, '\n' );
//for(int ln = 0; ln < strLines.GetSize(); ln++)
//the very first line is the header, the second is white
//the last two lines are white and summary respectively
//can be ASSERT-ed here
for ( int ln = MATLAB_OUTPUT_SKIP_LINES; ln < strLines.GetSize() - MATLAB_OUTPUT_SKIP_LINES; ln++ )
{
string strLine = strLines[ln];
StringArray strTokens;
int nInLine = strLine.GetTokens( strTokens );
if ( MATLAB_OUTPUT_NUMTOKENS > nInLine ) //4 categories: Name,Size,Bytes,Class
continue;
string strRow = strTokens[0] + "\t" +
strTokens[1] + "\t" +
strTokens[2] + "\t" +
strTokens[3];
if ( MATLAB_OUTPUT_NUMTOKENS + 1 == nInLine )
{
//handle the last token that can contain more words better here "double array (complex)"
strRow += " " + strTokens[4];
}
if ( MATLAB_OUTPUT_NUMTOKENS + 2 == nInLine )
{
//handle the last token that can contain more words better here "double array (complex)"
strRow += " " + strTokens[5];
}
if ( MATLAB_OUTPUT_NUMTOKENS + 2 < nInLine )
{
_DBSTR("DVT Matlab whos: more than 3 tokens in Class")
continue;
}
m_vsFlex.AddItem( strRow );
}
// expand outline, resize to fit, collapse outline
m_vsFlex.ReDraw();
}
else
{
iRet = -2;
//try to clean anyways
}
return iRet;
}
int GetMatlabVarType(long nR)
{
string strType = m_vsFlex.GetCell( nR, MATLAB_OUTPUT_TYPE_COL );
if(strType.CompareNoCase("double array") == 0)
return MATLAB_VAR_DOUBLE_ARRAY;
else if(strType.CompareNoCase("double complex") == 0)
return MATLAB_VAR_COMPLEX_ARRAY;
else if(strType.Find("int") != -1)
return MATLAB_VAR_INTEGER_ARRAY;
else if(strType.Find("char") != -1)
return MATLAB_VAR_CHAR_ARRAY;
else if(strType.CompareNoCase("single array") == 0)
return MATLAB_VAR_SINGLE_ARRAY;
return MATLAB_VAR_UNKNOWN;
}
BOOL OnImportAsMatrices(Control ctrl)
{
StringArray asNames;
StringArray asNamesC;
StringArray asNamesSI;
int nRowsSelected = m_vsFlex.SelectedRows();
for( int ii=0; ii < nRowsSelected; ii++ )
{
string strOut(m_vsFlex.SelectedRow(ii));
_DBSTR( strOut )
long nR = m_vsFlex.SelectedRow(ii);
int nVarType = GetMatlabVarType(nR);
if(nVarType == MATLAB_VAR_DOUBLE_ARRAY)
asNames.Add( m_vsFlex.GetCell( nR, MATLAB_OUTPUT_NAME_COL ) );
else if(nVarType == MATLAB_VAR_COMPLEX_ARRAY)
asNamesC.Add( m_vsFlex.GetCell( nR, MATLAB_OUTPUT_NAME_COL ) );
else if((nVarType == MATLAB_VAR_INTEGER_ARRAY)||
(nVarType == MATLAB_VAR_SINGLE_ARRAY)||
(nVarType == MATLAB_VAR_CHAR_ARRAY))
asNamesSI.Add( m_vsFlex.GetCell( nR, MATLAB_OUTPUT_NAME_COL ) );
}
string strResult;
GetMatlabRealMatrices( asNames, strResult );
GetMatlabComplexMatrices( asNamesC, strResult );
GetMatlabOtherNumMatrices( asNamesSI, strResult );
return TRUE; //for now
}
// return number of cols added
int AddMatlabDoubleArray(Worksheet& wks, string strMatLabVarName, bool bReplaceCurrent)
{
MatrixLayer mlTemp;
if(!mlTemp.Create(NULL, CREATE_HIDDEN))
return 0;
Matrix<double> mm(mlTemp);
///Soapy 11/20/03 7.0753 DELETE_TEMPORARY_MATRIX
/*
if(!m_mlObj.GetMatrix(strMatLabVarName, &mm))
{
mlTemp.Destroy(); ///Soapy 11/12/03 7.0749 DELETE_HIDDEN_MATRIX_WHEN_IMPORT_FAIL
return 0;
}
*/
int nRet=0;
if(m_mlObj.GetMatrix(strMatLabVarName, &mm))
{
nRet = MatToWks(mm, wks, strMatLabVarName);
}
mlTemp.Destroy();
return nRet;
}
// return number of cols added
int AddMatlabComplexArray(Worksheet& wks, string strMatLabVarName)
{
//MatrixLayer mlTemp;
//if(!mlTemp.Create(NULL, CREATE_HIDDEN))
// return 0;
// more codes goes here
printf("%s: complex matrix not supported\n");
return 0;
}
BOOL OnImportAsSingleWks(Control ctrl)
{
int nRowsSelected = m_vsFlex.SelectedRows();
bool bWksCreated = false;
Worksheet wksTemp;
if(m_bUpdateCols)
wksTemp.Attach(MATLAB_WKS_NAME);
if(!wksTemp.IsValid())
{
//CPY 1/29/03 SHOW_WKS_WHEN_IMPORT
//if(!wksTemp.Create(NULL, CREATE_HIDDEN))
if(!wksTemp.Create())
{
_DBSTR("Creating worksheet failed")
return FALSE;
}
bWksCreated = true;
}
if(bWksCreated)
{
while(wksTemp.DeleteCol(0)) // Remove all columns in worksheet
;
}
int nNameCount = 0;
for( int ii = 0; ii < nRowsSelected; ii++ )
{
long nR = m_vsFlex.SelectedRow(ii);
int nVarType = GetMatlabVarType(nR);
string strVarName = m_vsFlex.GetCell( nR, MATLAB_OUTPUT_NAME_COL );
if(nVarType == MATLAB_VAR_DOUBLE_ARRAY)
nNameCount += AddMatlabDoubleArray(wksTemp, strVarName, m_bUpdateCols);
else if(nVarType == MATLAB_VAR_COMPLEX_ARRAY)
nNameCount += AddMatlabComplexArray(wksTemp, strVarName);
else if((nVarType == MATLAB_VAR_SINGLE_ARRAY)||
(nVarType == MATLAB_VAR_INTEGER_ARRAY) ||
(nVarType == MATLAB_VAR_CHAR_ARRAY))
nNameCount += AddMatlabNumArray(wksTemp, strVarName, m_bUpdateCols);
else
{
printf("%d: %s -- Data type not supported\n", strVarName);
}
}
//---- CPY 1/29/03 SHOW_WKS_WHEN_IMPORT
/*
if(nNameCount > 0 && bWksCreated)
{
wksTemp.GetPage().Rename(MATLAB_WKS_NAME);
wksTemp.GetPage().SetShow();
return TRUE;
}
*/
if(bWksCreated)
{
if(0==nNameCount)
wksTemp.Destroy();
else
wksTemp.GetPage().Rename(MATLAB_WKS_NAME);
}
//----
return nNameCount > 0? TRUE : FALSE;
}
BOOL OnUpdateWorkSpace(Control ctrl)
{
if(m_mlObj)
{
FillTheGridWithData();
}
return TRUE;
}
/*
BOOL OnCheckKeepRunning(Control ctrl)
{
if(m_mlObj)
{
m_bKeepMatlabAlive = !m_bKeepMatlabAlive;
m_mlObj.KeepMatlabRunning = m_bKeepMatlabAlive;
}
return TRUE;
}
*/
private:
int m_nTimerID;
bool m_bRestoreWorkspace;
Matlab m_mlObj;
Button m_btnUpdate;
//CP IDC_MATLAB_KEEP_RUNNING
/*
Button m_chkKeepRunning;
BOOL m_bKeepMatlabAlive;
*/
bool m_bSingle;
};
#endif //_MATLAB_IMPORTDLG_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -