Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String Matlab证明字符串_String_Matlab_Formatting_Matlab Uitable - Fatal编程技术网

String Matlab证明字符串

String Matlab证明字符串,string,matlab,formatting,matlab-uitable,String,Matlab,Formatting,Matlab Uitable,我使用的是matlabr2014b(这就是为什么我不能使用strings,而只能使用charvectors)。在类中工作时,我必须从表变量中获取数据,根据需要对其进行格式化,然后将其插入GUI表(确切地说是uitable的一个实例): 其中: properties (Access = private, Constant) TypeDef1 = { 'A1' 'Name A1'; 'B1' 'Name B1'; 'C1' 'Name C1';

我使用的是
matlabr2014b
(这就是为什么我不能使用
strings
,而只能使用
charvectors
)。在
中工作时,我必须从
变量中获取数据,根据需要对其进行格式化,然后将其插入GUI表(确切地说是
uitable
的一个实例):

其中:

properties (Access = private, Constant)
    TypeDef1 = {
        'A1' 'Name A1';
        'B1' 'Name B1';
        'C1' 'Name C1';
        'D1' 'Name D1';
        ...
    }
    TypeDef2 = {
        'A2' 'Name A2';
        'B2' 'Name B2';
        'C2' 'Name C2';
        'D2' 'Name D2';
        ...
    }
end

methods (Access = private, Static)
    function str = FormatNumber(num)
        persistent df;

        if (isempty(df))
            dfs = java.text.DecimalFormatSymbols();
            dfs.setDecimalSeparator(',');
            dfs.setGroupingSeparator('.');

            df = java.text.DecimalFormat();
            df.setDecimalFormatSymbols(dfs);
            df.setMaximumFractionDigits(2);
            df.setMinimumFractionDigits(2);
        end

        str = char(df.format(num));
    end
end
一切正常。现在我想右对齐要插入到第1列和第5列中的字符串,以提高表的可读性。我找到了适合我需要的Matlab函数,
strjust
。在阅读文档时,我发现它可以与字符向量的
单元格数组一起使用,因此我修改了
UpdateTable
代码的一部分,如下所示:

tab(:,1) = cellstr(num2str(this.Data.ID));
tab(:,5) = strjust(arrayfun(@(x){MyClass.FormatNumber(x)},this.Data.Value));

t第二个选项不产生任何更改(字符串仍然没有对齐)。字符串是否已经包含足够的空格以保持相同的长度?

好的,我自己用以下代码解决了这个问题:

function UpdateTable(this)
    siz = size(this.Data);

    los = arrayfun(@(x){MyClass.FormatNumber(x)},this.Data.Value);
    los_lens = cellfun(@(x)numel(x),los);
    pad = cellfun(@blanks,num2cell(max(los_lens) - los_lens),'UniformOutput',false);

    tab = cell(siz);
    tab(:,1) = cellstr(num2str(this.Data.ID));
    tab(:,2) = cellstr(datestr(this.Data.Date,'dd/mm/yyyy'));
    tab(:,3) = arrayfun(@(x){MyClass.TypeDef1{x,1}},this.Data.Type1);
    tab(:,4) = arrayfun(@(x){MyClass.TypeDef2{x,1}},this.Data.Type2);
    tab(:,5) = cellstr(strcat(pad,los));

    this.UITable.Data = tab;
end

这可能不是最优雅的解决方案,但它确实有效。从Matlab 2016开始,可以使用内置的pad函数执行填充。

好的,我自己用以下代码解决了这个问题:

function UpdateTable(this)
    siz = size(this.Data);

    los = arrayfun(@(x){MyClass.FormatNumber(x)},this.Data.Value);
    los_lens = cellfun(@(x)numel(x),los);
    pad = cellfun(@blanks,num2cell(max(los_lens) - los_lens),'UniformOutput',false);

    tab = cell(siz);
    tab(:,1) = cellstr(num2str(this.Data.ID));
    tab(:,2) = cellstr(datestr(this.Data.Date,'dd/mm/yyyy'));
    tab(:,3) = arrayfun(@(x){MyClass.TypeDef1{x,1}},this.Data.Type1);
    tab(:,4) = arrayfun(@(x){MyClass.TypeDef2{x,1}},this.Data.Type2);
    tab(:,5) = cellstr(strcat(pad,los));

    this.UITable.Data = tab;
end

这可能不是最优雅的解决方案,但它确实有效。从Matlab 2016开始,可以使用内置的pad函数执行填充。

strjust似乎需要一个单元阵列,这里的主要问题似乎是您无法制作一个单元阵列。如果这是正确的:您能简单地创建一个带有for循环的单元数组来验证其余的工作吗?之后,您可以随时将其改写为更加优雅。这可能有效吗<代码>选项卡(:,5)=strjust(arrayfun(@(x){MyClass.FormatNumber(x)},this.Data.Value),'uniformoutput',false))
@Wouter这会引发一个错误“第一个参数不包含字符串的单元格数组”。我很抱歉。很高兴听到你成功了!strjust似乎需要一个单元数组,而这里的主要问题似乎是无法创建一个单元数组。如果这是正确的:您能简单地创建一个带有for循环的单元数组来验证其余的工作吗?之后,您可以随时将其改写为更加优雅。这可能有效吗<代码>选项卡(:,5)=strjust(arrayfun(@(x){MyClass.FormatNumber(x)},this.Data.Value),'uniformoutput',false))@Wouter这会引发一个错误“第一个参数不包含字符串的单元格数组”。我很抱歉。很高兴听到你成功了!