4

私はEmbedded MATLABがあまり好きではありませんでした.まさに私が尋ねようとしているような状況のためです. MATLAB API で十分です)。

でもまあ、避けられないこともあると思います。

とにかく、ここに私の問題があります。Embedded MATLAB では、R2010a と同様に、これを行うことはできません。

for ii = <some range>

    parameter = <some string> 

    switch parameter

        case 'first_string'
            % do stuff

        case 'another_string_that''s_larger_than_first_string'
            % do other stuff
    end

    % ...continue here

end

where<some string>は反復ごとに変化します。これは、文字列の長さparameterが可変であるためです。つまり、この の定義parameterは Embedded Matlab の機能を超えています。

??? 非定数式または空の行列。この式は定数でなければなりません。これは、その値によって式のサイズまたはクラスが決まるためです。定数文字列に対する制限は、数値のスイッチではなく、文字列のスイッチにのみ適用されます。

switchをより直接的な形式に変更する

switch <some string> 
    ...
end

もちろん役に立ちません:

??? Expected a numeric value. Found a mxArray

文字列のサイズを既知の一定の長さに制限しても役に立ちません。

parameter = char_array(ii, 1:4);  % <--- NOTE: length is 4 characters

switch parameter
    ...
end

しかし運がない:

??? 非定数式または空の行列。この式は定数でなければなりません。これは、その値によって式のサイズまたはクラスが決まるためです。定数文字列に対する制限は、数値のスイッチではなく、文字列のスイッチにのみ適用されます。

2 つの方法があります。

  1. 許容されるすべての文字列を何らかの数値表現にマップし、数値にスイッチを使用します
  2. strcmp(i)巨大な構造の中で使用しif-elseif-elseif-...-else-endます。

どちらも同様に醜い私見ですが、2. はおそらく醜いです (別の外部関数が必要になるでしょうstrcmp)...

それで、これから抜け出すエレガントな方法はありますか?

4

1 に答える 1