Передать результаты команды whos в список - PullRequest
0 голосов
/ 06 марта 2019

Я хочу экспортировать результаты команды whos в tlist внутри Scilab:

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 lingo это называется pipe ing с оператором |. Но я не знаю, как это сделать в Scilab. Буду признателен, если вы поможете мне с этим.

Ответы [ 2 ]

1 голос
/ 21 марта 2019

Вы можете редактировать исходный код самого 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.

0 голосов
/ 06 марта 2019

Я нашел очень уродливый обходной путь. Существует функция 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.

P.S. действительно печально, что сообщество Scilab так пустынно. Каждый раз, когда я задаю вопрос, я отвечаю сам.

...