過去の桐井戸端BBS (桐ver.8)
9926 項目値を変数にするには? kaz 2001/02/25-00:08
一度では飲み込めないのでまたまたお世話になります。

商品名     金額
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
あ      1000
い      2000
う      3000

のような表から金額値を変数にする
&あ=1000
&い=2000
&う=3000

にはどんな一括処理を書けばよろしいのでしょうか?
9930 Re:項目値を変数にするには?その2 kaz 2001/02/25-07:35
記事番号9926へのコメント
分からない点は・・・・・・・・
次のような一括処理を使うとして

繰り返し
代入 &i=&i+1
代入 &商品名[&i]=[金額]・・・・・ここが??です。
ジャンプ 行番号=+1
繰り返し終了

&商品名の直後の[&i]が???です。

私がしたいことは
&商品名に&あ,&い,&うが代入されて,
その値が代入されることなのです。

9931 Re:項目値を変数にするには?その2 宮城 2001/02/25-11:24
記事番号9930へのコメント
kazさん、こんにちは。発展性はともかく、お書きになっているまんまを実行する一括処理。
レコード並びと変数宣言はしておいて下さい。対象表のオープンも省略しています。

ジャンプ 行番号=先頭行
代入 &あ=[金額]
ジャンプ 行番号=次業
代入 &い=[金額]
ジャンプ 行番号=次業
代入 &う=[金額]

これだけのことですよ。

商品名? とすればこうかなあ。

ジャンプ 行番号=先頭行
代入 &A=[商品名],&あ=[金額]
ジャンプ 行番号=次業
代入 &B=[商品名],&い=[金額]
ジャンプ 行番号=次業
代入 &C=[商品名],&う=[金額]

9932 Re:項目値を変数にするには?その2 KH 2001/02/25-12:54
記事番号9931へのコメント
宮城さんは今日は、ご無沙汰しています。

kazさんのコメントがまだないのでなんともいえませんが、
商品名の名前(不確定で同一名があるやも知れぬ厄介な部分)を軒並み変数名にしたいというのではないでしょうか。
そして、その変数に金額をすべて代入したいということなのでは。
どのようにそれを利用しようとしているのかは見当つきません、あくまでも憶測ですが。

9933 Re:項目値を変数にするには?その2 kaz 2001/02/25-13:05
記事番号9931へのコメント
宮城さん こん**は  
いつもresありがとうございます。

>ジャンプ 行番号=先頭行
>代入 &あ=[金額]
>ジャンプ 行番号=次行
>代入 &い=[金額]
>ジャンプ 行番号=次行
>代入 &う=[金額]

>商品名? とすればこうかなあ。
>ジャンプ 行番号=先頭行
>代入 &A=[商品名],&あ=[金額]
>ジャンプ 行番号=次行
>代入 &B=[商品名],&い=[金額]
>ジャンプ 行番号=次行
>代入 &C=[商品名],&う=[金額]

この件に関しましては成功いたしました。

発展性を考えて・・・・・
今必要なデータ個数は28ありまして,28*2行同じような行を書くより,やはり配列変数で,
繰り返しコマンドを使って書いてみたいななんて思っています。
過去BBSログでは,処理速度は変わらないそうですが,
一括処理の行数は少なくしておきたいです。

商品名を変数名にする変数??? 頭が悪くこんがらがってしまいます。

9934 Re:項目値を変数にするには?その2 kaz 2001/02/25-13:13
記事番号9932へのコメント
KHさん  こん**は

>商品名の名前(不確定で同一名があるやも知れぬ厄介な部分)を軒並み変数名
>にしたいというのではないでしょうか。そして、その変数に金額をすべて代
>入したいということなのでは。

そう!そう! その通りです。

実は,会計処理の予算ファイルから,科目毎の予算を変数にしておいて科目毎の差引簿の先頭へ行挿入し,
初期値として差し引きしていくこんなことに使うためです。

※直前のコメントが時間がダブっていたようです。
9936 Re:項目値を変数にするには?その2 Ogo 2001/02/25-16:36
記事番号9933へのコメント

>発展性を考えて・・・・・
>今必要なデータ個数は28ありまして,28*2行同じような行を書くより,
>やはり配列変数で,繰り返しコマンドを使って
>書いてみたいななんて思っています。

オーソドックスな方法は「コマンド」コマンドを使う事です。
配列不要です(配列でも大丈夫ですが)。

9938 Re:項目値を変数にするには?(Ogoさんのコメントでテストしてみました) KH 2001/02/25-17:17
記事番号9934へのコメント
別ツリーのOgoさんの「コマンド」コマンドを使えというコメントで私もテストしてみました。
以下で、[商品名]の項目内容を変数に宣言できました。
出来た変数名は数値型にしてありますが、都合の良いように変更して利用してください。
Ogoさんのコメントで私が勉強させていただきました。
もしかしてここで引っかかっていると思ったのですが、違ってましたか。

変数宣言 固有,整数{&i}
&i=0
繰り返し
  代入 &i=&i+1
  コマンド "変数宣言 固有,数値{ &"+[商品名]+ "}"
  ジャンプ 行番号=+1
  条件(#EOF) 繰り返し中止
繰り返し終了

9941 Re:項目値を変数にするには?その2 kaz 2001/02/25-20:21
記事番号9936へのコメント
KHさんの

変数宣言 固有,整数{&i}
&i=0
繰り返し
  代入 &i=&i+1
  コマンド "変数宣言 固有,数値{ &"+[商品名]+ "}"
  ジャンプ 行番号=+1・・・・・・・・・・・・・・・・ここは&iですか?
  条件(#EOF) 繰り返し中止
繰り返し終了


コマンドこまんどで宣言できた変数にそれぞれ[金額]値を代入するには??
上記のコマンド・・・・の次行に
どのような一括処理コマンドが考えられますか?
9942 Re:項目値を変数にするには?その2 Ogo 2001/02/25-22:06
記事番号9941へのコメント

>コマンドこまんどで宣言できた変数にそれぞれ[金額]値を代入するには??

1.配列変数を使わない方法

編集表 "ほにゃらら"
ジャンプ 行番号=先頭
繰り返し ( .not #終端行 )
 コマンド "変数宣言 固有,通貨{&"+[商品名]+"="+#文字列([金額])+"}"
 ジャンプ 行番号=次行
繰り返し終了

- - - -

2.配列変数を使う方法

編集表 "ほにゃらら"
コマンド "変数宣言 固有,通貨{&商品["+#文字列(#総件数)+"]}
代入 &標準偏差=1
ジャンプ 行番号=先頭
繰り返し ( .not #終端行 )
 コマンド "代入 &商品["+#文字列(&標準偏差)+"]="+#文字列([金額])
 代入 &標準偏差=&標準偏差+1
 ジャンプ 行番号=次行
繰り返し終了

- - - -

動作確認はしていません。

あと、フと思い付いたのですが、変数名には使えない文字があったと記憶するのですが
(最初の文字が数字ではまずかったと思う)。

また、商品名の変数をたくさん作ってしまうと、もしも一括処理の別部分で同名の変数を使う
(宣言する)場合に非常にマズイです(その変数の型が上記宣言の型と異なるとエラーで止まってしまう)。

更に、よく似た名前の商品名が存在する時に、桐の仕様では最初の10文字までだけを認識する(判別に使う)ので、
11文字目以降で異なる文字列が出て来るような商品(複数)が存在する時は、これは判別不能になります。

従って、よっぽどの確証がない限り、配列変数を使うのが無難かなと。

# ところで、ヘルプとかをちゃんと読んで質問しているのですか?
# 変数に値を代入させる方法なんて、「変数宣言」の説明にちゃんと明記
# してあるのですが。

9945 Re:項目値を変数にするには?その2 Ogo 2001/02/25-23:02
記事番号9942へのコメント

>2.配列変数を使う方法
>コマンド "変数宣言 固有,通貨{&商品["+#文字列(#総件数)+"]}

ダブルクォーテイションが1つ抜けていましたね。正しくは

2.配列変数を使う方法

編集表 "ほにゃらら"
コマンド "変数宣言 固有,通貨{&商品["+#文字列(#総件数)+"]}"
代入 &標準偏差=1
ジャンプ 行番号=先頭
繰り返し ( .not #終端行 )
 コマンド "代入 &商品["+#文字列(&標準偏差)+"]="+#文字列([金額])
 代入 &標準偏差=&標準偏差+1
 ジャンプ 行番号=次行
繰り返し終了


9948 Re:項目値を変数にするには?その2 Ogo 2001/02/25-23:52
記事番号9942へのコメント

>1.配列変数を使わない方法
>
>編集表 "ほにゃらら"
>ジャンプ 行番号=先頭
>繰り返し ( .not #終端行 )
> コマンド "変数宣言 固有,通貨{&"+[商品名]+"="+#文字列([金額])+"}"
> ジャンプ 行番号=次行
>繰り返し終了

あゝそうか。変数名に不安があるなら、こんな手もあるんだ。
桐5互換バージョンにしてみよう。

1.配列変数を使わない方法

編集表 "ハレホレ"
代入 &標準偏差=1
位置指定 行番号=先頭
繰り返し ( .not #終端行 )
 コマンド "変数宣言 数値{&商品"+#文字列(&標準偏差,4)+"}"
 コマンド "代入 &商品"+#文字列(&標準偏差,4)+"="+#文字列([金額])
 代入 &標準偏差=&標準偏差+1
 位置指定 行番号=次行
繰り返し終了


9950 変数ファイルを使う方法があります 佐田 守弘 2001/02/26-00:42
記事番号9926へのコメント
kazさん
この課題には、変数ファイルを使う方法があります。
変数ファイルは、
<変数名>,<データ型>,<種別:固有、共通など>,<値>
の4つがコンマで区切られたCSVファイル形式です。
ですから、印字コマンドを使って表の項目値を変数ファイルに書き出します。
次いで変数読み込みで読み込めば、変数の定義と値のセットが同時にできるはずです。

表 <表ファイル>
印字開始 <変数ファイル名.var>
繰り返し (.not #終端行)
 印字 [<変数にしたい項目>],",文字列,固有,",[<値の項目>]
繰り返し終了
印字終了
変数読み込み <変数ファイル名>

もし、変数ファイル名の出力が拒否されたら、txtファイルで書き出し、後からリネームして下さい。

佐田守弘(KS-00119)
10042 みなさんありがとうございます kaz 2001/03/04-23:47
記事番号9926へのコメント
たくさんのresがつき感激です。
おかげを持ちまして,やっと何とか実現できました。

配列変数とそうでない場合,両方挑んで出来ました。

ただ,佐田さんご教示の印字コマンドを使うやつはファイルが100MBにもなってしまい,
どうもうまくいきませんでした。

※なお,途中 表ファイルが見つからないエラーメッセージが出てしまい
 別にて質問しております。
 そういうわけで,Ogoさんごめんなさい。ご指摘感謝。
10044 変数ファイルがそれ程大きくなるはずはないのですが。 佐田 守弘 2001/03/05-00:18
記事番号10042へのコメント
kazさん
>ただ,佐田さんご教示の印字コマンドを使うやつは
>ファイルが100MBにもなってしまい,どうもうまくいきませんでした。

変数ファイルがそれ程大きくなる事はまず考えられないですね。
1変数を書出すのに高々100バイト程度です。
100万個以上書き出さなければ100MBになるはずはありません。
そもそも、それ程膨大な変数を桐は扱えません。
おそらく、変数を書き出す一括処理にエラーがあると思います。
多分、「ジャンプ 行番号=+1」が入っておらず、無限ループで同じ変数を書き出しているとか。

佐田守弘(KS-00119)
10049 Re:変数ファイルがそれ程大きくなるはずはないのですが。 kaz 2001/03/05-14:54
記事番号10044へのコメント
佐田 守弘さん いつもありがとうございます。

表 ”○○”
繰り返し (.not #終端行)
印字開始 ”印字コマンド.var”,追加
 印字 [項目],",文字列,固有,",[金額]
 ジャンプ 行番号=+1
条件 (#EOF) 繰り返し中止
繰り返し終了
印字終了


これでうまくいきました。

ありがとうございました。

戻る