過去の桐井戸端BBS (桐ver.8)
2882 登録プリンタを調べて変更する一括処理を教えて! kaz 1999/10/11-20:16
みなさま こん**わ kazともうします。
一括処理中に
登録されているプリンタをすべて調べて
それをポップアップで表示し
選択してプリンタ変更できる

こんな一括処理を教えてください。
初心者の方々に桐を使ってもらう必要上
是非実現したいのですが

よろしくお願いいたします。
2883 Re: 悲しげ 1999/10/11-21:53
記事番号2882へのコメント
どもっ、kazさん、
私はcmdで次のような方法でやっています。(v7.*〜v8)

*------------------
名札 プリンタ変更
*------------------
&PRNT=#桐プリンタ名,&PRNTs="",&i=1
繰り返し
 条件(#ウィンドウズプリンタ名(&i)="") 繰り返し中止
 &PRNTs=&PRNTs+","+#ウィンドウズプリンタ名(&i)
 &i=&i+1
繰り返し終了
&PRNTs=#sstr(&PRNTs,2),&j=#対応番号(&PRNTs,&PRNT)
メニュー2 &j,&j,(18,48),"プリンタ指定([Esc]で無変更)",&PRNTs
条件(&j=0) 手続き終了
プリンタ #ウィンドウズプリンタ名(&j),終了状態=&終了
手続き終了
2884 Re: kaz 1999/10/12-00:26
記事番号2883へのコメント
悲しげさん ありがとうございました。

何度見返しても,ため息が出ます。なるほどっ!!!
★の行の意味がわかりません。

 >*------------------
 >名札 プリンタ変更
 >*------------------
★>&PRNT=#桐プリンタ名,&PRNTs="",&i=1
 >繰り返し
 > 条件(#ウィンドウズプリンタ名(&i)="") 繰り返し中止
★> &PRNTs=&PRNTs+","+#ウィンドウズプリンタ名(&i)
 > &i=&i+1
 >繰り返し終了
★>&PRNTs=#sstr(&PRNTs,2),&j=#対応番号(&PRNTs,&PRNT)
 >メニュー2 &j,&j,(18,48),"プリンタ指定([Esc]で無変更)",&PRNTs
 >条件(&j=0) 手続き終了
 >プリンタ #ウィンドウズプリンタ名(&j),終了状態=&終了
 >手続き終了

是非是非,ご教授下さい。
2894 Re: 悲しげ 1999/10/12-22:30
記事番号2884へのコメント
どもっ、kazさん、

>★>&PRNT=#桐プリンタ名,&PRNTs="",&i=1
> >繰り返し
> > 条件(#ウィンドウズプリンタ名(&i)="") 繰り返し中止
>★> &PRNTs=&PRNTs+","+#ウィンドウズプリンタ名(&i)
> > &i=&i+1
> >繰り返し終了
>★>&PRNTs=#sstr(&PRNTs,2),&j=#対応番号(&PRNTs,&PRNT)
> >メニュー2 &j,&j,(18,48),"プリンタ指定([Esc]で無変更)",&PRNTs
> >条件(&j=0) 手続き終了
> >プリンタ #ウィンドウズプリンタ名(&j),終了状態=&終了
> >手続き終了

&PRINTとは、桐で現在設定してあるプリンタ名ひとつを受ける変数の
つもりです。
&PRINTsとは、プリンタ名の複数計を示す意味でsを付けました。日本
語で云えば、「プリンタ群」とでもなりましょうか。これはメニュー
に表示させるためにカンマで区切った文字列群を意図しています。
繰り返しループ内では、Winに登録してあるプリンタ名を、登録順にひ
とつづつ(空振りするまで)、カンマを挟んで、変数&PRINTsにどんど
ん連結しています。
その結果、この変数の中味は、例えば次のようになります。
 &PRINTs=",LP-1500,LP9600F,LBP880,PM770C,BJF600"
これだと、最初にカンマがあってうまくないので、繰り返しループを
終わってから、部分列関数で2文字目以降を取り出しています。
&j=#対応番号(&PRNTs,&PRNT)は、桐で現在設定してあるプリンタをメニューの
初期値にしたいので、そのプリンタがプリンタ文字列群の何番目に当たるのかを
対応番号関数で取り出しています。

こんなところでいかがでしょう。
2895 Re: kaz 1999/10/12-22:53
記事番号2894へのコメント
悲しげさん こん**わ
昨日から何度ものぞいて待っておりました。ありがとうございます。
ご説明はおよそ理解できました。

  &PRNT=#桐プリンタ名,&PRNTs="",&i=1  とか
  &PRNTs=#sstr(&PRNTs,2),&j=#対応番号(&PRNTs,&PRNT)
の様に,変数=のあと , で区切っての書式そのものがいまいち理解できません。
代入コマンドを簡単に記述する書式なのでしょうか?

どこかにこの説明があるのでしょうが,私にはとんと???です。

そのあたりを今一度ご教授下さい。
2899 Re:「代入」コマンドの記述方法 悲しげ 1999/10/13-10:51
記事番号2895へのコメント
どもっ、kazさん、

>  &PRNT=#桐プリンタ名,&PRNTs="",&i=1  とか
>の様に,変数=のあと , で区切っての書式そのものがいまいち理解
>できません。代入コマンドを簡単に記述する書式なのでしょうか?

正しくは
  代入 &PRNT=#桐プリンタ名
  代入 &PRNTs=""
  代入 &i=1
のように書くのかもしれませんね。ただ代入コマンドの「代入」の字句は
省略できます。どこに説明してあるかは知りませんが、皆さんこのように
書いているので、私も真似しています。
それと、代入コマンドは、カンマを挟んで1行内に追記できます。一括処理では1行づつ
実行して行くそうですから、まとめられるものは1行に追記した方が、複数行に記述するよりも、
処理速度が幾分上がるらしいです。
カンマ区切りで1行に連記して使う頻度が高いものは、この代入と置換だと思います。
少なくとも私はそのようにして使っていますが、その説明がどこにあるかも、
すいません、私は知りません。
2900 Re: kaz 1999/10/13-11:50
記事番号2899へのコメント
悲しげさん  こん**は
納得いきました。本当にありがとうございました。
2922 「代入」と「置換」コマンドの記述方法 佐田 守弘 1999/10/16-23:06
記事番号2899へのコメント
●置換コマンドの場合
置換コマンドでは、コマンド1回実行すると、表ファイルを先頭から最終行まで順
に項目値を書き替えて行きます。
もし1項目ずつ置換を行うコマンドを複数行記述すると、この読み書き動作が置換
コマンドの数だけ繰り返されます。
一方、1つの置換コマンドに複数の項目を列記した場合には、それらを同時に書き替えます。
表ファイルを読み書きする操作は時間が掛かる操作なので、1回の読み書きで必要な項目を
全て置換してしまった方が、トータルとしての速度が上がるわけです。
私のテストでは、一度に置換する項目が増えてもほとんど処理時間に影響せず、置換コマンドの
実行回数を増やすと、ほぼそれに比例して時間が増える様です。

ただし、これは大きな表を置換する時の話です。桐はページバッファを使っていて、
読み書き中のページを含めて数ページをメモリ上のバッファにおいて作業をしています。

このため、バッファに収まってしまう程度の小さな表では、どちらの方法で行って
もあまり時間差が出ません。

●代入コマンドの場合
代入コマンドの場合には、メモリに対して操作を行います。このため、複数の代入コマンドに分けても、
あまり処理時間には影響しないと思います。
複数行に分けると、コマンド名を解析する時間がわずかに増えます。しかしこれはほとんど無視しうる
程度でしょう。

佐田KS-00119
2925 Re: kaz 1999/10/17-13:09
記事番号2922へのコメント
佐田さん ありがとうございました。

私のデータ数は約1000件ぐらいになる予定です。
今のところ200件程度ですから
1項目の置換ですから2秒程度かかっておりまして
実用上ほとんど差し支えございません。

大いに参考になりました。ありがとうございます。

戻る