vecset関数でタイプのエラー
- このフォーラムに新しいトピックを立てることはできません
- このフォーラムではゲスト投稿が禁止されています
tomiya
投稿数: 15
![新米 新米](../../uploads/rank3e632f95e81ca.gif)
いつもお世話になっております。
MAGIC V9plus でvecset関数を利用したところ結果として動作はしています。
しかし、F8キーでデバックしてみると「EP0141:タイプが合っていません」とエラーが出ます。
おそらく未熟な私の使い方に問題があるのではと思っておりますが、詳細を下記に記します。
[変数]
変数名:(V)temp
型:ベクトル型
モデル:文字 40
[項目更新処理]
更新項目:temp
式:VecSet ('A'VAR,1,'AB')
※Aは(V)tempです。
上記記述です。
その他として項目更新後以下の処理ではエラーは出ず通常通りの動作します。
[検証1]
vecget(A,1)
※正常で格納されたABが表示される
[検証2]
vecsize(A)
※正常で格納された項目数が表示される
以上です。どなたかお助けいただけると幸いです。
MAGIC V9plus でvecset関数を利用したところ結果として動作はしています。
しかし、F8キーでデバックしてみると「EP0141:タイプが合っていません」とエラーが出ます。
おそらく未熟な私の使い方に問題があるのではと思っておりますが、詳細を下記に記します。
[変数]
変数名:(V)temp
型:ベクトル型
モデル:文字 40
[項目更新処理]
更新項目:temp
式:VecSet ('A'VAR,1,'AB')
※Aは(V)tempです。
上記記述です。
その他として項目更新後以下の処理ではエラーは出ず通常通りの動作します。
[検証1]
vecget(A,1)
※正常で格納されたABが表示される
[検証2]
vecsize(A)
※正常で格納された項目数が表示される
以上です。どなたかお助けいただけると幸いです。
投票数:0
平均点:0.00
TAKI
投稿数: 1
![新米 新米](../../uploads/rank3e632f95e81ca.gif)
tomiya様、こんにちは。
※ 私もあまりMagicに詳しくないので、見当違いの事を書くかもしれませんが
お許しください。
tomiya様の書かれている項目更新処理だと、
更新項目:tempにVecSet関数の処理成功/処理失敗を返すようになるかと思います。
ですので、エラーの理由はtemp の型が論理値ではないためではないかと
思われるのですがいかがでしょうか。
※ 私もあまりMagicに詳しくないので、見当違いの事を書くかもしれませんが
お許しください。
tomiya様の書かれている項目更新処理だと、
更新項目:tempにVecSet関数の処理成功/処理失敗を返すようになるかと思います。
ですので、エラーの理由はtemp の型が論理値ではないためではないかと
思われるのですがいかがでしょうか。
投票数:0
平均点:0.00
yone
投稿数: 30
![半人前 半人前](../../uploads/rank3dbf8e94a6f72.gif)
tomiyaさん こんにちは
Vecsetを項目更新ではなく、アクションで実行するとどうでしょうか?
Vecsetを項目更新ではなく、アクションで実行するとどうでしょうか?
投票数:0
平均点:0.00
tomiya
投稿数: 15
![新米 新米](../../uploads/rank3e632f95e81ca.gif)
TAKIさん
yoneさん
返答ありがとうございます。
さっそくいただいた案件を元に下記の処理を実行してみました。
[変数]
変数名:(V)temp
型:ベクトル型
モデル:文字 40
変数名:(V)temp2
型:論理型
[検証1]
<アクション>
VecSet ('A'VAR,1,'AB')
結果:エラーは表示されないがtempの内容も更新されない。
[検証2]
<項目更新>
更新項目:temp2
式:VecSet ('A'VAR,1,'AB')
結果:エラーは表示されないがtempの内容も更新されない。
上記の結果となりました。
エラーは消えたのですが、tempの中身が更新されないという結果となりました。
何故エラーは出ないのに項目の更新がされなくなったのかがわかりません。困りました。。。
yoneさん
返答ありがとうございます。
さっそくいただいた案件を元に下記の処理を実行してみました。
[変数]
変数名:(V)temp
型:ベクトル型
モデル:文字 40
変数名:(V)temp2
型:論理型
[検証1]
<アクション>
VecSet ('A'VAR,1,'AB')
結果:エラーは表示されないがtempの内容も更新されない。
[検証2]
<項目更新>
更新項目:temp2
式:VecSet ('A'VAR,1,'AB')
結果:エラーは表示されないがtempの内容も更新されない。
上記の結果となりました。
エラーは消えたのですが、tempの中身が更新されないという結果となりました。
何故エラーは出ないのに項目の更新がされなくなったのかがわかりません。困りました。。。
投票数:0
平均点:0.00
Jiro123
投稿数: 271
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
はじめまして
どちらのパターンでも、問題なく動作いたしましたよ。
アクションコマンドの場合は、戻り値欄に論理型項目を指定しました。
VecSet関数の第一パラメータは、VARリテラルを用いたシンボル名です。
論理型変数を追加したことで、シンボル名が変わったということはありませんか。
ちなみに、論理型変数には、VecSet関数の戻り値がセットされます。
Trueならば、VecSet関数が成功、FalseならばVecSet関数が失敗したことを示します。
ヘルプによると、失敗するケースとしては、指定したシンボルがベクトル型でない場合や、セルインデックスが負の場合が挙げられています。
どちらのパターンでも、問題なく動作いたしましたよ。
アクションコマンドの場合は、戻り値欄に論理型項目を指定しました。
VecSet関数の第一パラメータは、VARリテラルを用いたシンボル名です。
論理型変数を追加したことで、シンボル名が変わったということはありませんか。
ちなみに、論理型変数には、VecSet関数の戻り値がセットされます。
Trueならば、VecSet関数が成功、FalseならばVecSet関数が失敗したことを示します。
ヘルプによると、失敗するケースとしては、指定したシンボルがベクトル型でない場合や、セルインデックスが負の場合が挙げられています。
投票数:0
平均点:0.00
tomiya
投稿数: 15
![新米 新米](../../uploads/rank3e632f95e81ca.gif)
Jiro123さん
返信ありがとうございます。
その後再度実行してみたのですが、下記のことが原因であったことがわかりました。
タスクA-|
|-タスクB
私の実行環境ではAで宣言されているベクトル変数をタスクBで変更させるという
処理を行っていました。
Bタスク上でアクションで処理を行った場合に変更されなかったため、
Bタスクにパラメータとして送りアクションを実行したところ無事項目が
更新されました。
そのため、アクションでは更新されないと認識してしまいました。
何故タスクB上でパラメータを使わず更新できないのかは原因がわかりませんでした。
実はもう一点ですが、下記の処理を行っております。
変数名:(V)temp
型:ベクトル型
モデル:文字 40
<項目更新>
更新項目:(V)temp
式:''
で、(V)tempベクトル変数の複数の項目を一旦空白で初期化する
という処理を行っております。こちらも動作は正常なのですが、
同じくタイプエラーが出るようになっております。
エラーを出さずに(V)tempベクトル変数を初期化する方法等ありますでしょうか?
返信ありがとうございます。
その後再度実行してみたのですが、下記のことが原因であったことがわかりました。
タスクA-|
|-タスクB
私の実行環境ではAで宣言されているベクトル変数をタスクBで変更させるという
処理を行っていました。
Bタスク上でアクションで処理を行った場合に変更されなかったため、
Bタスクにパラメータとして送りアクションを実行したところ無事項目が
更新されました。
そのため、アクションでは更新されないと認識してしまいました。
何故タスクB上でパラメータを使わず更新できないのかは原因がわかりませんでした。
実はもう一点ですが、下記の処理を行っております。
変数名:(V)temp
型:ベクトル型
モデル:文字 40
<項目更新>
更新項目:(V)temp
式:''
で、(V)tempベクトル変数の複数の項目を一旦空白で初期化する
という処理を行っております。こちらも動作は正常なのですが、
同じくタイプエラーが出るようになっております。
エラーを出さずに(V)tempベクトル変数を初期化する方法等ありますでしょうか?
投票数:0
平均点:0.00
null
投稿数: 191
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
初期化に関してですが、私は同じ型のベクトル変数を用意しておいて、
それを項目更新でセットすることで初期化しています。
変数名:(V)temp2
型:ベクトル型
モデル:文字 40
(V)temp2 は他では未使用(つまり、初期状態)
項目更新 (V)temp ← (V)temp2
それを項目更新でセットすることで初期化しています。
変数名:(V)temp2
型:ベクトル型
モデル:文字 40
(V)temp2 は他では未使用(つまり、初期状態)
項目更新 (V)temp ← (V)temp2
投票数:0
平均点:0.00
Jiro123
投稿数: 271
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
フローモニターで、ベクトル型項目の初期値を確認すると、「null」となっていました。
それを参考に、項目更新コマンドで、ベクトル型項目に対して「Null()」関数を設定するようにして、初期化を行っています。
もちろん、nullさんの回答にある方法でも良いと思いますよ。
それを参考に、項目更新コマンドで、ベクトル型項目に対して「Null()」関数を設定するようにして、初期化を行っています。
もちろん、nullさんの回答にある方法でも良いと思いますよ。
投票数:0
平均点:0.00
null
投稿数: 191
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
そういえば、null() 関数なんてものがありましたね。
そちらの方がスッキリするので今後はそれを活用します。
そちらの方がスッキリするので今後はそれを活用します。
投票数:0
平均点:0.00
tomiya
投稿数: 15
![新米 新米](../../uploads/rank3e632f95e81ca.gif)
Jiro123さん
nullさん
貴重な意見本当にありがとうございます。
null()関数を利用することでうまく初期化することができました。
本当に助かりました。これでなんとか先に進むことができそうです。
皆さん多くの意見をいただきありがとうございました。
nullさん
貴重な意見本当にありがとうございます。
null()関数を利用することでうまく初期化することができました。
本当に助かりました。これでなんとか先に進むことができそうです。
皆さん多くの意見をいただきありがとうございました。
投票数:0
平均点:0.00