私はMatlab R2014b
を使用しています(そのため、strings
は使用できませんが、char vectors
のみ)。 class
内部の作業、私は(正確には、uitable
のインスタンス)table
変数からデータを取らなければならない、フォーマット、それは私のニーズを、以下、その後、GUIテーブルに挿入:Matlab Justify Strings
function UpdateTable(this)
siz = size(mydata);
tab = cell(siz);
tab(:,1) = num2cell(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) = arrayfun(@(x){MyClass.FormatNumber(x)},this.Data.Value);
this.UITable.Data = tab;
end
:
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
。ドキュメントを読んで、私はそれがcell arrays of char vectors
で使用できることがわかりましたので、以下のように私は私のUpdateTable
コードの一部を変更:
tab(:,1) = cellstr(num2str(this.Data.ID));
tab(:,5) = strjust(arrayfun(@(x){MyClass.FormatNumber(x)},this.Data.Value));
間に合わ秒1は何も変更(文字列はまだ正当化されない)を生成しません。文字列にはすでにすべて同じ長さの空白が含まれていなければなりませんか?
strjustにはセル配列が必要なように見えますが、ここでの主な問題は、作成に失敗したように見えます。それが正しい場合は、単純にforループを使ってセル配列を作成して、残りが機能することを確認できますか?その後、いつでもよりエレガントになるように書き換えることができます。 –
これは機能する場合がありますか? ' – Wouter
@Wouterこれはエラーをスローします" 'tab(:、5)= strjust(arrayfun(@(x){MyClass.FormatNumber(x)}、this.Data.Value)、 'uniformoutput'、false));最初の引数には文字列のセル配列が含まれていません "。 –