将whos命令的结果传送到tlist

时间:2019-03-06 09:04:36

标签: pipe scilab

我想将whos命令的结果导出到Scilab内部的tlist中:

Name                     Type           Size           Bytes        

%_k                      constant       1x1            0            
%_LG_all                 string         141x1          0            
%_lhs                    constant       1x1            0            
%_nams                   string         133x1          0            
%_nams_all               string         141x1          0            
%_nams_global            string         8x1            0            
%_rhs                    constant       1x1            0            
%_sz                     string         1x1            0            
%_typ                    constant       1x1            0 

在Unix术语中,它称为pipe,由|运算符完成。但是我不知道如何在Scilab中做到这一点。如果您能帮助我,我将不胜感激。

2 个答案:

答案 0 :(得分:1)

您可以编辑whos本身的源代码(它是用Scilab语言编写的):

--> edit whos

通过向此函数添加输出

function out=whos(%_opt,%_sel)

以及下面的第118行的说明

out(%_k) = struct("name",%_nams_all(%_k),"type",%_typn,...
                  "dimensions",%_sz,"bytes",%_vol_all(%_k)*8);

您将得到想要的东西。当然,您也可以创建一个列表...

S。

答案 1 :(得分:0)

我发现了一个非常丑陋的解决方法。有一个diary函数将最后sdout个条目导出到文件中。通过使用正则表达式和一些文件魔术,我可以将whos输出作为矩阵:

WhosExp = "/([\%\_\#\!\$\?a-zA-Z]+[\%\_\#\!\$\?a-zA-Z0-9]*)\s+(constant|polynomial|function|handle|string|boolean|list|rational|state\-space|sparse|boolean sparse|hypermat|st|ce|fptr|pointer|size implicit|library|int8|uint8|int16|uint16|int32|uint32|\_EObj|\_EVoid)\*?\s+((\d+)x(\d+)|\?)?\s+(\d+)/"

TempFile = TMPDIR + '/TempDiary.txt';
clc;
diary(TempFile)
whos;
diary(0)
clc;

TempID = mopen(TempFile, 'rt'); 
TempInfo = fileinfo(TempFile)
TempString = mgetstr(TempInfo(1), TempID);
mclose(TempID);
mdelete(TempFile);
[start, final, match, foundString] = regexp(TempString, WhosExp);

foundString是矩阵/列表,如果需要,可以将其转换为tlis

PS ,令人遗憾的是Scilab社区如此冷清。每当我问一个问题时,我都会回答自己。