ホーム   フォーラム   FAQ
 
メインメニュー
ログイン
ユーザー名:

パスワード:


パスワード紛失

vecset関数でタイプのエラー

  • このフォーラムに新しいトピックを立てることはできません
  • このフォーラムではゲスト投稿が禁止されています
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2009-9-28 17:43
tomiya  新米   投稿数: 15
Jiro123さん
nullさん

貴重な意見本当にありがとうございます。

null()関数を利用することでうまく初期化することができました。

本当に助かりました。これでなんとか先に進むことができそうです。

皆さん多くの意見をいただきありがとうございました。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2009-9-28 17:17
null  長老   投稿数: 191
そういえば、null() 関数なんてものがありましたね。
そちらの方がスッキリするので今後はそれを活用します。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2009-9-28 16:21
Jiro123  長老   投稿数: 271
フローモニターで、ベクトル型項目の初期値を確認すると、「null」となっていました。

それを参考に、項目更新コマンドで、ベクトル型項目に対して「Null()」関数を設定するようにして、初期化を行っています。

もちろん、nullさんの回答にある方法でも良いと思いますよ。


投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009-9-28 16:07
null  長老   投稿数: 191
初期化に関してですが、私は同じ型のベクトル変数を用意しておいて、
それを項目更新でセットすることで初期化しています。

変数名:(V)temp2
型:ベクトル型
モデル:文字 40

(V)temp2 は他では未使用(つまり、初期状態)

項目更新 (V)temp ← (V)temp2
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009-9-28 14:33
tomiya  新米   投稿数: 15
Jiro123さん

返信ありがとうございます。

その後再度実行してみたのですが、下記のことが原因であったことがわかりました。

タスクA-|
   |-タスクB

私の実行環境ではAで宣言されているベクトル変数をタスクBで変更させるという
処理を行っていました。

Bタスク上でアクションで処理を行った場合に変更されなかったため、
Bタスクにパラメータとして送りアクションを実行したところ無事項目が
更新されました。

そのため、アクションでは更新されないと認識してしまいました。

何故タスクB上でパラメータを使わず更新できないのかは原因がわかりませんでした。

実はもう一点ですが、下記の処理を行っております。

変数名:(V)temp
型:ベクトル型
モデル:文字 40

<項目更新>
更新項目:(V)temp
式:''

で、(V)tempベクトル変数の複数の項目を一旦空白で初期化する
という処理を行っております。こちらも動作は正常なのですが、
同じくタイプエラーが出るようになっております。

エラーを出さずに(V)tempベクトル変数を初期化する方法等ありますでしょうか?
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009-9-28 13:19 | 最終変更
Jiro123  長老   投稿数: 271
はじめまして

どちらのパターンでも、問題なく動作いたしましたよ。

アクションコマンドの場合は、戻り値欄に論理型項目を指定しました。

VecSet関数の第一パラメータは、VARリテラルを用いたシンボル名です。

論理型変数を追加したことで、シンボル名が変わったということはありませんか。

ちなみに、論理型変数には、VecSet関数の戻り値がセットされます。

Trueならば、VecSet関数が成功、FalseならばVecSet関数が失敗したことを示します。

ヘルプによると、失敗するケースとしては、指定したシンボルがベクトル型でない場合や、セルインデックスが負の場合が挙げられています。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009-9-28 9:46
tomiya  新米   投稿数: 15
TAKIさん
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
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2009-9-25 17:51
yone  半人前   投稿数: 30
tomiyaさん こんにちは

Vecsetを項目更新ではなく、アクションで実行するとどうでしょうか?
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2009-9-25 14:00
TAKI  新米   投稿数: 1
tomiya様、こんにちは。
※ 私もあまりMagicに詳しくないので、見当違いの事を書くかもしれませんが
  お許しください。

tomiya様の書かれている項目更新処理だと、
更新項目:tempにVecSet関数の処理成功/処理失敗を返すようになるかと思います。
ですので、エラーの理由はtemp の型が論理値ではないためではないかと
思われるのですがいかがでしょうか。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 .3 .4 .5 | 投稿日時 2009-9-19 10:38
tomiya  新米   投稿数: 15
いつもお世話になっております。

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

  条件検索へ


Copyright (C) Magic Software Japan K.K. All Rights Reserved.
個人情報保護方針 会員規約