54961


複数の addAnalogInputChannel を同時に定義しようとしています。  
MATLABのバージョンはR2017bです。  
[MATLABドキュメントのaddAnalogInputChannelに関するページ](https://jp.mathworks.com/help/daq/ref/addanaloginputchannel.html)を読みました。

[前回の質問](https://ja.stackoverflow.com/questions/54908/matlab%E3%81%A7%E8%A4%87%E6%95%B0%E3%81%AE-
addanaloginputchannel-%E3%82%92%E5%90%8C%E6%99%82%E3%81%AB%E5%AE%9A%E7%BE%A9%E3%81%99%E3%82%8B%E6%99%82%E3%81%AE%E3%82%A8%E3%83%A9%E3%83%BC/54914#54914)のご回答をいただき、コードを書いて実行したところ、以下のエラーが表示されました。  
エラーを受けて、MATLABで文字列と整数から文字列に変換した値を結合させる時は、どのように書けばいいのでしょうか。

[code]

    The device 'Dev!' does not have a channel 'ai146'. Valid channel IDs are 'ai0', 'ai1', 'ai2', ...
    
[/code]

実行したコード

[code]

    num = 1
    for i = 1:1:num
        disp(int2str(i))
        disp('ai' + int2str(i))
        ch(i) = addAnalogInputChannel(s, 'Dev1', 'ai' + int2str(i), 'Voltage');
    end
    
[/code]

結果 （i = 1のとき）

[code]

    1
    146 154
    
[/code]


CC BY-SA 4.0
2019-05-15T01:51:37.117
54960
2019-05-15T02:10:29.300
question
c matlab データ構造
MATLABで文字列と整数から文字列に変換した値を結合させる時のエラー


シングルクォートで囲った文字列は、実は文字列と言うより、文字型の配列といった方が正しく、文字列として扱うには少し癖があります。代表的な、文字型の配列を結合する方法には二つあります。

一つは

[code]

    ['ai' int2str(i)]
    
[/code]

で、もう一つは

[code]

    strcat('ai', int2str(i))
    
[/code]

です。

* * *

`'ai' + int2str(1)`が`146
154`となる理由ですが、まず`'ai'`は1x2の文字型の配列です。`a`の文字コードは97、`b`は105ですので、`[97 105]`という配列です。

一方、`int2str(1)`の結果の`1`の文字コードは49です。したがって`'ai' + int2str(1)`という計算は、

[code]

    [97 105] + 49
    
[/code]

と解釈されます。MATLABで配列にスカラー値を足すと、スカラー値が配列の要素全てに足されるので

[code]

    [97 105] + 49 == [97+49, 105+49] == [146 154]
    
[/code]

になります。

最近のバージョンのMATLABでは、ダブルクォートで文字列が扱えます。ダブルクォートの文字列なら`"ai" +
int2str(1)`は期待通り`"ai1"`になるので分かりやすいと思います。


CC BY-SA 4.0
2019-05-15T02:01:32.837
54961
2019-05-15T02:10:29.300
2019-05-15T02:10:29.300
3605
3605
54960
answer