Google
オフコン練習帳内を検索
インターネット全体を検索

NECオフコン関連
オフコン一般
情報

NECのオフコン情報掲示板(ノウハウ系)

NECのオフコンを活用するためのノウハウを話し合うための掲示板です。

1: #NFCNVの制限?(2)   2: LLNIPの印刷(3)   3: #BKUPでusbに直接出力できますか?(3)   4: A−VXのプリンタ設定方法が分かりません(2)   5: OSのCDについて(4)   6: 初期プログラムに関する質問(4)   7: ボリュームMAPにあるが、#ABCだとファイルがみつからない(2)   8: SYS@DDFの復旧(2)   9: スプールデータの取り出し方法についての質問(10)   10: SG処理にて、PAGW実行中にエラーが発生しました(9)   11: ソースライブラリの一括検索(9)   12: 帳表をPDF印刷する方法(PRINTVEWを使わず)はありますか(2)   13: SKYLINKでテーブルを検索するとエラーとなる(1)   14: オフコン(3)   15: 管理人さんへの質問です(3)   16: #LTEDITでフォームのソースを指定するとメンバーが見つからないと表示される(4)   17: UPS無しの構成へのシステム移行(12)   18: #NFCNV でパソコンへ転送すると、データの先頭に空白がついてしまう(3)   19: CBL85資産をOPENcobolに移行する(3)   20: COBOLソースから仕様書の鏡作成ツール(3)   21: PrintBridgeの使い方(8)   22: WSエミュレータをWindows7Pro32bitSP1PCにインストール出来なくなった(1)   23: 漢字とANKの縮小印字について(3)   24: #NFCNVで先頭のカラムが0になるのは?(2)   25: N7884-14Bと互換性があるプリンタについて(2)   26: 表示(印刷)を任意の順番にしたいのですが・・・(6)   27: JSまたはPMのコールが間違っています(3)   28: ページプリンターのSG方法(2)   29: SMARTの画面明細項目が終われない(8)   30: AVXでの外字(槇)について(6)  

 新規投稿 | スレッド表示 | ツリー表示 | 投稿順表示 | i-mode | トップ 
« 1 ... 71 72 73 (74) 75 76 77 ... 84 »

1 RDBのレコード削除のバッチ処理の方法
江須扇 2004-8-24 16:33:00  [返信] [編集]

こんにちは江須扇です。

一ヶ月前のデータを削除したいというバッチ処理を考えた時。

RDBQ2のカタログでは一ヶ月前という条件指定が難しいです。

(もしご存知の方がお見えでしたら教えてください。)

SMART2は1ファイル更新でレコード削除は可能ですが

選択条件が働かず全件読込です。



COBOLはRDBのSELECTは条件と分類しかできなく

SQL文としてUPDATEやDELETEができません。



そこで、下記のようなコーディングを考えたのですが

GOTOレスではこんな感じでよいのでしょうか?

例1と例2ではどちらがよいのでしょうか?



例1
---------------------------------------------------------------------------

000010 IDENTIFICATION      DIVISION.
000020 PROGRAM-ID.         RDBDEL.
000030 ENVIRONMENT         DIVISION.
000040 CONFIGURATION      SECTION.
000050 SOURCE-COMPUTER.    EXPRESS5800.
000060 OBJECT-COMPUTER.    EXPRESS5800.
000070 INPUT-OUTPUT        SECTION.
000080 FILE-CONTROL.
000090     SELECT  RDBFILE  ASSIGN  TO RDBFILET-RDB.
000100 DATA          DIVISION.
000110 FILE          SECTION.
000120 FD  RDBFILE
000130     LABEL   RECORD  IS      STANDARD
000140     VALUE   OF      IDENTIFICATION   "RDBFILE-TBL".
000150     COPY RDBFILE-R  OF DDF.
000160 WORKING-STORAGE     SECTION.
000170 77  WRK-DATE     PIC 9(06).
000180 01  READ-FLG     PIC 9(01) VALUE 0.
000190 88  READ-END           VALUE 9.
000200 PROCEDURE        DIVISION.
000210 MAIN          SECTION.
000220 MAIN-RTN.
000230     ACCEPT WRK-DATE FROM DATE.
000240     IF WRK-DATE(3:2) = 01
000250                SUBTRACT 8900 FROM WRK-DATE
000260             ELSE SUBTRACT  100 FROM WRK-DATE
000270     END-IF.
000280     OPEN  I-O    RDBFILE.
000029     SELECT RDBFILE WHERE RDB-DATE     < WRK-DATE.
000300     PERFORM UNTIL READ-END
000310       READ RDBFILE AT  END SET READ-END TO TRUE
000320               NOT END DELETE RDBFILE
000330       END-READ
000340     END-PERFORM.
000350     CLOSE RDBFILE.
000360     STOP RUN.



例2

---------------------------------------------------------------------------

000010 IDENTIFICATION     DIVISION.
000020 PROGRAM-ID.       RDBDL2.
000030 ENVIRONMENT       DIVISION.
000040 CONFIGURATION      SECTION.
000050 SOURCE-COMPUTER.    EXPRESS5800.
000060 OBJECT-COMPUTER.    EXPRESS5800.
000070 INPUT-OUTPUT      SECTION.
000080 FILE-CONTROL.
000090     SELECT  RDBFILE  ASSIGN  TO RDBFILET-RDB.
000100 DATA          DIVISION.
000110 FILE          SECTION.
000120 FD  RDBFILE
000130     LABEL   RECORD  IS      STANDARD
000140     VALUE   OF      IDENTIFICATION   "RDBFILE-TBL".
000150     COPY RDBFILE-R  OF DDF.
000160 WORKING-STORAGE     SECTION.
000170 77  WRK-DATE     PIC 9(06).
000180 01  READ-FLG     PIC 9(01) VALUE 0.
000190 88  READ-END           VALUE 9.
000200 PROCEDURE        DIVISION.
000210 FLOW          SECTION.
000220 FLOW-RTN.
000230     PERFORM INIT.
000240     PERFORM MAIN UNTIL READ-END.
000250     PERFORM FINE.
000260 INIT          SECTION.
000270 INIT-RTN.
000280     ACCEPT WRK-DATE FROM DATE.
000290     IF WRK-DATE(3:2) = 01
000300               SUBTRACT 8900 FROM WRK-DATE
000310            ELSE SUBTRACT  100 FROM WRK-DATE
000320     END-IF.
000330     OPEN  I-O    RDBFILE.
000340     SELECT RDBFILE WHERE RDB-DATE      <WRK-DATE.
000350 MAIN          SECTION.
000360 MAIN-RTN.
000370     READ RDBFILE AT  END SET READ-END TO TRUE
000380                  NOT END DELETE RDBFILE
000390     END-READ.
000400 FINE          SECTION.
000410 FINE-RTN.
000420     CLOSE RDBFILE.
000430     STOP RUN.

2 Re:RDBのレコード削除のバッチ処理の方法
EXCHANGE 2004-8-24 18:27:00  [返信] [編集]


> 000240     IF WRK-DATE(3:2) = 01
> 000250                SUBTRACT 8900 FROM WRK-DATE
> 000260             ELSE SUBTRACT  100 FROM WRK-DATE
> 000270     END-IF.



☆ ここの部分で、ハタ、と 分からなくなってしまいました。

 江須扇さんのロジックが間違っているということではなく、



☆ 「3月28日の1ヶ月前は?」と来たら問題なしに「2月28日」。

 でも、

 「2月28日の1ヶ月前は?」ときたら

 「1月28日」? 「1月31日」?

  これはソフトを運用する状況によって違ってきそうな気がします。



☆ もし、「1月31日」でしたら単に?100とするのはマズイかも。。



3 Re:RDBのレコード削除のバッチ処理の方法
江須扇 2004-8-24 20:39:00  [返信] [編集]

EXCHANGEさん今晩は

いつも即行の対応ありがとう御座います。



>  「2月28日の1ヶ月前は?」ときたら

>  「1月28日」? 「1月31日」?

>   これはソフトを運用する状況によって違ってきそうな気がします。

これはアバウトに作ってあるの約一ヶ月と考えてください。

「3月31日」の時は「2月31日」になってしまいますが、

それより小さいで比較しておりますのでこれは問題ありません。

また、「2月28日」の時は「1月28日」で「1月27日」以前しか消えませんが

「3月1日」の時は「2月1日」でそれより小さい1月分は消えるので

問題ないと思います。



>

> ☆ もし、「1月31日」でしたら単に−100とするのはマズイかも。。

> > 000240     IF WRK-DATE(3:2) = 01
> > 000250                SUBTRACT 8900 FROM



1月の時は−8900にしているので問題は無いと思いますが?
4 Re:RDBのレコード削除のバッチ処理の方法
EXCHANGE 2004-8-26 23:23:00  [返信] [編集]

☆ 江須扇さん、こんばんわ。

 すみません、書き方が舌足らずで。。



> ☆ もし、「1月31日」でしたら単に−100とするのはマズイかも。。



 の言わんとするところですが、直前の文章から(なんと指示語もなしに)続いておりまして、



>「2月28日の1ヶ月前は?」ときたら 



 の答えが−−>(A)「1月28日」でなく、(B)「1月31日」でしたら と言う意味でした。



 (B)の解釈の場合、「2月28日の1ヶ月前」というのは「1月31日」になりますので、 040228 − 100 = 040128 としてしまうと、(A)タイプの解釈になってマズイ、 という意味です。



☆ ただし、いずれにせよ江須扇さんの目的は約1ヶ月前までのデータを削除することにあるとのことですので、そこまで心配することはなかったようです。



☆ ところでこのような場合(というよりこのようなケースを想定して)私が良くやる方法は、



(1)所詮、データベースは項目単位でしか取り扱い出来ないので、

(2)初めからデータ上に「年月日」以外にもう一つ「年月度」という項目を取っておく。



 というふうにしています。

例えば、年月日「20040826」でしたら年月度「200408」となりますし、 年月日「040826」でしたら年月度「0408」となります。

 そして、

(3)データ削除のPGでは初期条件の入力でユーザに「削除年月度を指定して下さい」とやります。

 あとは、 COBOLにて

 

 SELECT RDBFILE

   WHERE RDBーGETUDO <= IN−GETUDO  

 という調子です。



☆ これの方が面倒くさくなくて便利に思うのですが。。

  ただし、また容量無駄遣いしてしまいますけどね!!



 

5 Re: x4: RDBのレコード削除のバッチ処理の方法
江須扇 2004-8-27 22:21:00  [返信] [編集]

今晩は、EXCHANGEさん



> >「2月28日の1ヶ月前は?」ときたら 

>  の答えが−−>(A)「1月28日」でなく、(B)「1月31日」でしたら と言う意味でした。



(B)と解釈した場合は

2月27日の一ヶ月前は1月30日

2月1日の一ヶ月前は1月4日

1月31日の一ヶ月前は1月3日

3月31日の一ヶ月前は2月28日

3月30日の一ヶ月前は2月27日

では3月1日の一ヶ月前は????

解からなくなってしまいました。混乱、混乱、



> (3)データ削除のPGでは初期条件の入力でユーザに「削除年月度を指定して下さい」とやります。

>  あとは、 COBOLにて

>  SELECT RDBFILE

>    WHERE RDBーGETUDO <= IN−GETUDO  

>  という調子です。

> ☆ これの方が面倒くさくなくて便利に思うのですが。。



む?、私はアバウトSEなので、オペレーションが入ると忘れてしまいますので、

目指しているのはノンオペレーションの夜間バッチです。

バッチ完了メールが朝入っていれはOK、入ってなければ、障害発生としています。



>   ただし、また容量無駄遣いしてしまいますけどね!!



所で話は長くなりますが、

旧100(赤100、1978年以前)のCOBOLはパックデータが使えませんでした。

その事を他社(多分F)に突かれて急遽サブルーチン提供がされました。



ファイルをREADしたあと

CALL ”UNPACK” USING FILE−A WORK−A SIZE−A

CALL ”UNPACK” USING FILE−B WORK−B SIZE−B





の様に一項目毎、アンパックに戻して処理をして、

終わったら

CALL ”PACK” USING WORK−A FILE−A SIZE−A

CALL ”PACK” USING WORK−B FILE−B SIZE−B





でファイルをREWRITEします。

(記憶ですのであくまでもこんな感じでしたと思ってください)

大変面倒くさかったです。



その後、新100が出てからCOMP−3でパックデータが使えるようになりました。

当時はディスク容量は小さくパックデータにするのが当たりまででした。

メモリは内部処理でアンパックに戻して処理をするのであまり効果はなかったようです。

またNECの場合はパックデータの符号無しにしても1桁は1バイト、2桁は2バイトで

処理フラグや区分で1桁2桁を使う場合はあまり効果はありませんでした。



しかし現在はディスク容量も増えたのでパックにする意味は少なくなったと思います。

特にNECの場合はFILLERの項目を後で使う場合など不正十進数エラーが

パックデータは符号無しでもスペースはLOW−VALUEでもおきてしまうので使い勝手が悪いです。

設計時はパックデータ、追加項目はアンパックとデータベースの各項目がゴチャゴチャになっているのが実体です。



時代の流れでパックデータを採用した時代もありましたが、今にして思えは、本来のシステム100の基本である

アンパックにしていればと思っております。



ここで本題に戻ります。



> (1)所詮、データベースは項目単位でしか取り扱い出来ないので、

> (2)初めからデータ上に「年月日」以外にもう一つ「年月度」という項目を取っておく。

> 例えば、年月日「20040826」でしたら年月度「200408」となりますし、 年月日「040826」でしたら年月度「0408」となります。



確かめてないので解かりませんが、アンパックであればCOBOL側フィールドを階層構造にしておけば、

上6桁や上4桁も可能ではとおもいます。

データベース定義も階層構造でしてすれば可能を思います。(これも確かめていません。)



8桁+6桁のパックの場合5+4=9バイト、アンパックの8桁階層構造8バイト

6桁+4桁のパックの場合4+3=7バイト、アンパックの6桁階層構造6バイト



と考えた場合でもアンパックが良いのでは思いますが皆様は如何お考えでしょうか?
全部読む 最新50 1-100 板のトップ リロード

1 ハードディスク
まさ 2004-8-20 11:40:00  [返信] [編集]

前から思っていたのですがExpress5800/600シリーズ
の純正ハードディスクは高価ですが市販のものは付かないのでしょう
か?
※ちなみにディスクアレイになってます。
2 Re:ハードディスク
amadeus 2004-8-22 22:19:00  [返信] [編集]

一般的にメーカーや販売店や保守会社の立場からだと純正品以外は
「取り付けられない」との回答があるでしょう。
販売する製品については純正品にての動作検証のみをおこなって
保証の対象にしているのですから。
ましてやアレイ構成の場合は、単体のディスクの動作よりも複雑な
条件での環境ですので、より厳しい条件となります。
業務で使用されるのなら純正品の選択しかないでしょう。

でも実際は・・・・・  やめておきましょう。(笑)

> 前から思っていたのですがExpress5800/600シリーズ
> の純正ハードディスクは高価ですが市販のものは付かないのでしょう
> か?
> ※ちなみにディスクアレイになってます。
3 Re:ハードディスク
EXCHANGE 2004-8-23 13:06:00  [返信] [編集]

> 前から思っていたのですがExpress5800/600シリーズ
> の純正ハードディスクは高価ですが市販のものは付かないのでしょう
> か?
> ※ちなみにディスクアレイになってます。

☆ Linux、自己責任の時代ですので、そういったことを前提でいくつかの問題点を述べてみましょう。

(1) 現在のA−VXは、Windows上で動作する「ミドルウエア」ですので、原理的に言えばWindowsが稼働するかどうかが、まず問題になります。PCサーバといえども、一般に大型のサーバになるほどメーカの独自の機器(または独自仕様のOEM機器)を搭載したり、ハードの監視用ソフト、UPSとの連携、等の機能が搭載されています。従って購入時のWindowsのバージョンを変更することは(ドライバなどの関係で)難しい場合があります。

(2)ミドルウエアとしてのA−VXをインストールする場合、独自な(A−VX向け)ドライバを必要とするのは、フロッピー装置、CMT装置などですので、これらの装置は他の装置と交換は出来ないでしょう。

(3)DAT装置、ディスク装置、等はWindows上で動作する物であれば、A−VXでも利用できる可能性はあるでしょう。

(4)700シリーズの場合は、PCサーバではないし、またWindowsNT3.51(MIPS用)のドライバがあまり提供されていない、大容量のディスクには対応していない等の問題があるので、適用できる可能性のある機器はごく限られるでしょう。

☆ 製品の一部に純正品でないものがある場合、保守契約サービスは原則として受けられないでしょう。この場合、換装パーツをのぞいた部分の保守契約を引き受けてくれる保守会社を探すか、もしくは保守契約なしで運用するか、のどちらかになります。いずれにしてもかなりの部分を「自己責任」で引き受ける必要があります。

☆ 以上の観点から、「実務での運用」となるとamadeusさんのおっしゃるとおり「やめといたほうが。。」ということになります。

☆ なお、メモリーに関してはサードパーティ製の物で保守会社が認定している物もあるようです(ADTEC社など)。私は使ったことがないので詳しいことは分かりませんが、一度保守会社にお訊きになってはいかがでしょうか?

☆ あと、メーカさんにお願いしたいのですが、「まささん」と同様の気持ちをもたれているユーザさんはかなりおられると思います。100シリーズに比べてあまりに高価な増設パーツの価格設定は、オープン連携によるA−VXマシーンの高度利用を阻害し、長い目で見れば「さらばレガシー」に結びついていくような気がします。御一考をお願いしたいと思います。


4 Re:ハードディスク
まさ 2004-8-24 9:38:00  [返信] [編集]

皆さん返信有難うございます。

そうですね、おっしゃる通り何か有った時のリスクを考えると純正品
が一番安心して使用していられますね。
現在、大容量のHDがかなり安価で手に入る時代ですので思ったまで
です。
5 Re:ハードディスク
BLUELION 2004-8-27 9:12:00  [返信] [編集]

うちの640ADには、安い120maのHDやメモリがついております。

実際同じEXPRESSでおなじ規格なのに値段が相当ちがいますよね

CPUも120MAのP2の450でDUALです



まーやり方によっては120MAな一般のPC(ノートを含む)でもA-VXはうごきますからね ノートで動くAVXは感動的でした(笑)



ただし テスト環境のみの構成で、本番環境で保守なしで運用する勇気はありません



ちなみ全体の構成としては

Windowsは最新のIDEをCドライブしてセットアップしAVX系はもともとのRAIDのドライブに入れています。



6 Re:ハードディスク
ターラヤン 2004-8-30 1:54:00  [返信] [編集]

> うちの640ADには、安い120maのHDやメモリがついております。

> 実際同じEXPRESSでおなじ規格なのに値段が相当ちがいますよね

> CPUも120MAのP2の450でDUALです

>

> まーやり方によっては120MAな一般のPC(ノートを含む)でもA-VXはうごきますからね ノートで動くAVXは感動的でした(笑)

>

ノートパソコンで動きましたか。

てっきり普通のPCサーバ(IAサーバ)のハードを基本的に流用して、若干の改造が

入っているのだろうと思っていました。

改造が入るにしても、CPUやハードディスクに手を入れられるとは思えないので、

マザーボード辺りでしょうかね。



私もハードディスクは見たことがありますが、普通のSCSIのハードディスクのようでした。

動作保障代やA−VX代を含めた値段なのでしょうが、S3100やS7200時代と比べると安いものの、

現在の一般的な水準と比べると高いような気がします。





P.S.Express以外のいろいろなパソコンにA-VX入れるのはライセンス上問題があるかも・・というのは野暮な話ですよね。

NECの人も見ているかもしれないので、とりあえず内輪の話にしておきましょう。

7 Re:ハードディスク
BLUELION 2004-8-30 8:02:00  [返信] [編集]



> P.S.Express以外のいろいろなパソコンにA-VX入れるのはライセンス上問題があるかも・・というのは野暮な話ですよね。

> NECの人も見ているかもしれないので、とりあえず内輪の話にしておきましょう。

>

そうですね ただかなり特殊な手続きしないと動かないし



 PS 当然 著作権上に問題があるのはわかっているので環境はすぐ消しました
8 Re:ハードディスク
assisi 2004-9-4 8:27:00  [返信] [編集]

> 皆さん返信有難うございます。
> そうですね、おっしゃる通り何か有った時のリスクを考えると純正品
> が一番安心して使用していられますね。
> 現在、大容量のHDがかなり安価で手に入る時代ですので思ったまで
> です。

メモリーは ハギワラシスコム製で使用できますよ
純正品より かなり安いです
増設もパソコンと一緒で簡単にできます
全部読む 最新50 1-100 板のトップ リロード

1 構造化プログラミングの方法
江須扇 2004-8-19 14:00:00  [返信] [編集]

こんにちは、ご無沙汰しております。江須扇です。

今日は初歩的な事をご教授していただきたく投稿しました。
過去のCOBOLのプログラムはGO TO だらけなのでメンテナンスは、
そのままGO TO だらけで修正しております。
構造化プログラミングはいままでしていないので、いまさらと思っておりまし
たが、新規プログラムをGOTOレスで作ろうと思ったのですが中々巧くいき
ません。サンプルを作ったのですが、おかしいところを添削していただけない
でしょうか?

項目Aと項目Bを入力しその表示をして項目Bに戻るというものです。
また、項目BでBTABをすれば項目Aに戻る必要もあります。
項目A又は項目BでPF9を入力すると終了とします。
実際はMAIN−RTNはもっと複雑になります。

コーディング例

----------------------------------------------------------------------

000010 IDENTIFICATION   DIVISION.
000020 PROGRAM-ID.      ACPTST.
000030 ENVIRONMENT      DIVISION.
000040 CONFIGURATION    SECTION.
000050 SOURCE-COMPUTER. EXPRESS5800.
000060 OBJECT-COMPUTER. EXPRESS5800.
000070 DATA             DIVISION.
000080 WORKING-STORAGE  SECTION.
000090 77  A-CELL       PIC  X(05).
000100 77  B-CELL       PIC  X(05).
000110 01  SWITCH-FLAG  PIC  9(01) VALUE 0.
000120 88  SWITCH-HTAB             VALUE 1.
000130 88  SWITCH-BSKIP            VALUE 9.
000140 SCREEN  SECTION.
000150 SD  GAMEN END    STATUS IS  END-STATUS.
000160 01  ACEP-A CLEAR SCREEN.
000170     02 LINE 05   COLUMN 10 PIC X(05) USING A-CELL.
000180 01  ACEP-B.
000190     02 LINE 10   COLUMN 10 PIC X(05) INTO  B-CELL.
000200 01  DISP-C.
000210     02 LINE 15   COLUMN 10 PIC N(05) FROM  A-CELL.
000220     02 LINE 20   COLUMN 10 PIC N(05) FROM  B-CELL WAIT.
000230 PROCEDURE        DIVISION.
000240 INIT-RTN.
000250     SET SWITCH-BSKIP TO TRUE.
000260     PERFORM UNTIL END-STATUS = "P9"
000270       EVALUATE TRUE
000280           WHEN SWITCH-BSKIP
000290                ACCEPT    ACEP-A
000300                IF END-STATUS = "01"
000310                                     SET SWITCH-HTAB TO TRUE
000320                END-IF
000330           WHEN SWITCH-HTAB
000340                DISPLAY   ACEP-A
000350                ACCEPT    ACEP-B
000360                EVALUATE  END-STATUS
000370                    WHEN  "01"       PERFORM MAIN-RTN
000380                    WHEN  "09"       SET SWITCH-BSKIP TO TRUE
000390                END-EVALUATE
000400       END-EVALUATE
000410     END-PERFORM.
000420     STOP RUN.
000430******************************************************************
000440 MAIN-RTN.
000450     DISPLAY DISP-C.
2 (再投稿)構造化プログラミングの方法
江須扇 2004-8-19 14:18:00  [返信] [編集]


コーディング例


----------------------------------------------------------------------

000010 IDENTIFICATION DIVISION.
000020 PROGRAM-ID. ACPTST.
000030 ENVIRONMENT DIVISION.
000040 CONFIGURATION SECTION.
000050 SOURCE-COMPUTER. EXPRESS5800.
000060 OBJECT-COMPUTER. EXPRESS5800.
000070 DATA DIVISION.
000080 WORKING-STORAGE SECTION.
000090 77 A-CELL PIC X(05).
000100 77 B-CELL PIC X(05).
000110 01 SWITCH-FLAG PIC 9(01) VALUE 0.
000120 88 SWITCH-HTAB VALUE 1.
000130 88 SWITCH-BSKIP VALUE 9.
000140 SCREEN SECTION.
000150 SD GAMEN END STATUS IS END-STATUS.
000160 01 ACEP-A CLEAR SCREEN.
000170     02 LINE 05 COLUMN 10 PIC X(05) USING A-CELL.
000180 01 ACEP-B.
000190     02 LINE 10 COLUMN 10 PIC X(05) INTO B-CELL.
000200 01 DISP-C.
000210     02 LINE 15 COLUMN 10 PIC N(05) FROM A-CELL.
000220     02 LINE 20 COLUMN 10 PIC N(05) FROM B-CELL WAIT.
000230 PROCEDURE DIVISION.
000240 INIT-RTN.
000250     SET SWITCH-BSKIP TO TRUE.
000260     PERFORM UNTIL END-STATUS = "P9"
000270       EVALUATE TRUE
000280           WHEN SWITCH-BSKIP
000290                ACCEPT ACEP-A
000300                IF END-STATUS = "01"
000310                                     SET SWITCH-HTAB TO TRUE
000320                END-IF
000330           WHEN SWITCH-HTAB
000340                DISPLAY ACEP-A
000350                ACCEPT ACEP-B
000360                EVALUATE END-STATUS
000370                    WHEN "01" PERFORM MAIN-RTN
000380                    WHEN "09" SET SWITCH-BSKIP TO TRUE
000390                END-EVALUATE
000400       END-EVALUATE
000410     END-PERFORM.
000420     STOP RUN.
000430******************************************************************
000440 MAIN-RTN.
000450     DISPLAY DISP-C.
3 Re:(再投稿)構造化プログラミングの方法
EXCHANGE 2004-8-20 3:40:00  [返信] [編集]

☆ バッチ処理プログラムでは、専ら「構造化」で書くのですが、入力系(会話型)では、GOTOをつかっていますので、あまりいい考えは浮かばないのですが。。

例えば、次のような考え方はダメでしょうか。。

 MOVE 1  TO CUR-POSITION
  MOVE 2  TO CUR-POSITION-MAX
  MOVE SPACE  TO END-STATUS
*
  PERFORM  UNTIL END-STATUS = "P9"
              OR CUR-POSITON > CUR-POSITION-MAX
    EVALUATE  CUR-POSITION
      WHEN 0
      WHEN 1
             ACCEPT   ACEP-A-ACP
             EVALUATE END-STATUS 
               WHEN "09"
                    SUBTRACT 1  FROM CUR-POSITION
               WHEN OTHER
                    DISPLAY ACEP-A-DSP
                    ADD 1       TO   CUR-POSITON
             END-EVALUATE
      WHEN 2
             ACCEPT  ACEP-B-ACP 
             EVALUATE END-STATUS 
               WHEN "09"
                    SUBTRACT 1  FROM CUR-POSITION
               WHEN OTHER
                    DISPLAY ACEP-B-DSP
                    ADD 1       TO   CUR-POSITON
             END-EVALUATE
      WHEN OTHER
             CONTINUE
    END-EVALUATE
  END-PERFORM.

5 Re:(再投稿)構造化プログラミングの方法
EXCHANGE 2004-8-20 11:39:00  [返信] [編集]

WHEN 0 の時の取り扱いがまずいので、訂正です。
まだまだヘンかも。。。
適当に直して下さい。


*
PERFORM UNTIL END-STATUS = "P9"
           OR FOCUS-POSITON > FOCUS-POSITION-MAX
*
  EVALUATE FOCUS-POSITION
    WHEN 1
          ACCEPT ACEP-A-ACP
          EVALUATE END-STATUS
            WHEN "09"
                SUBTRACT 1 FROM FOCUS-POSITION
            WHEN OTHER
                DISPLAY ACEP-A-DSP
                ADD 1 TO FOCUS-POSITON
          END-EVALUATE
    WHEN 2
          ACCEPT ACEP-B-ACP
          EVALUATE END-STATUS
            WHEN "09"
                SUBTRACT 1 FROM FOCUS-POSITION
            WHEN OTHER
                DISPLAY ACEP-B-DSP
                ADD 1 TO FOCUS-POSITON
          END-EVALUATE
    WHEN OTHER
          CONTINUE
  END-EVALUATE
*
  IF FOCUS-POSITION = 0
    THEN MOVE 1 TO FOCUS-POSITION
  END-IF
*
END-PERFORM.
6 もう少しだけ直しました。
EXCHANGE 2004-8-20 13:09:00  [返信] [編集]

もう少しだけ直しました。
 いかがでしょうか?


MOVE 1 TO FOCUS-POSITION.
MOVE 2 TO FOCUS-POSITION-MAX.
MOVE SPACE TO END-STATUS.
MOVE SPACE TO WINDOW-STATUS.
*
PERFORM UNTIL END-STATUS = "P9"
             OR WINDOW-STATUS = "EXIT"
*
  EVALUATE FOCUS-POSITION
    WHEN 1
          ACCEPT ACEP-A-ACP
          EVALUATE END-STATUS
            WHEN "09"
                SUBTRACT 1 FROM FOCUS-POSITION
            WHEN OTHER
                DISPLAY ACEP-A-DSP
                PERFORM ACEP-A-CHECK-SUB
                IF ERR-FLAG = 1
                  THEN
                      DISPLAY ERROR-MSG-A
                  ELSE
                      ADD 1 TO FOCUS-POSITON
                END-IF
          END-EVALUATE
    WHEN 2
          ACCEPT ACEP-B-ACP
          EVALUATE END-STATUS
            WHEN "09"
                SUBTRACT 1 FROM FOCUS-POSITION
            WHEN OTHER
                DISPLAY ACEP-B-DSP
                PERFORM ACEP-B-CHECK-SUB
                IF ERR-FLAG = 1
                  THEN
                      DISPLAY ERROR-MSG-B
                  ELSE
                      ADD 1 TO FOCUS-POSITON
                END-IF
          END-EVALUATE
    WHEN OTHER
          CONTINUE
  END-EVALUATE
*
  IF FOCUS-POSITION = 0
    THEN MOVE 1 TO FOCUS-POSITION
  END-IF
*
  IF FOCUS-POSITION > FOCUS-POSITION-MAX
    THEN MOVE "EXIT" TO WINDOW-STATUS
  END-IF
*
END-PERFORM.
7 Re:もう少しだけ直しました(その2)
EXCHANGE 2004-8-21 12:20:00  [返信] [編集]

もう少しだけ直しました。(その2)
 いかがでしょうか??


*
MOVE 1 TO FOCUS-POSITION.
MOVE 2 TO FOCUS-POSITION-MAX.
MOVE SPACE TO END-STATUS.
MOVE SPACE TO WINDOW-STATUS.
*
PERFORM UNTIL END-STATUS = "P9"
             OR WINDOW-STATUS = "EXIT"
*
  EVALUATE FOCUS-POSITION
    WHEN 1
          ACCEPT ACEP-A-ACP
          EVALUATE END-STATUS
            WHEN "09"
                SUBTRACT 1 FROM FOCUS-POSITION
            WHEN "01"
                DISPLAY ACEP-A-DSP
                PERFORM ACEP-A-CHECK-SUB
                IF ERR-FLAG = 1
                  THEN
                      DISPLAY ERROR-MSG-A
                  ELSE
                      ADD 1 TO FOCUS-POSITON
                END-IF
            WHEN OTHER
                CONTINUE
          END-EVALUATE
    WHEN 2
          ACCEPT ACEP-B-ACP
          EVALUATE END-STATUS
            WHEN "09"
                SUBTRACT 1 FROM FOCUS-POSITION
            WHEN "01"
                DISPLAY ACEP-B-DSP
                PERFORM ACEP-B-CHECK-SUB
                IF ERR-FLAG = 1
                  THEN
                      DISPLAY ERROR-MSG-B
                  ELSE
                      ADD 1 TO FOCUS-POSITON
                END-IF
            WHEN OTHER
                CONTINUE
          END-EVALUATE
    WHEN OTHER
          CONTINUE
  END-EVALUATE
*
  IF FOCUS-POSITION = 0
    THEN MOVE 1 TO FOCUS-POSITION
  END-IF
*
  IF FOCUS-POSITION > FOCUS-POSITION-MAX
    THEN MOVE "EXIT" TO WINDOW-STATUS
  END-IF
*
END-PERFORM.

8 Re:もう少しだけ直しました(その2)
江須扇 2004-8-22 12:53:00  [返信] [編集]

EXCHAGEさん早速いろいろと回答を頂きありがとうございます。
いろいろと考えていただきありがとうございます。

結論としてはやはり自分で何らかのスイッチを定義する必要があると言う事ですか。
A−VXのCOBOLの機能で使えるものは無いということですね。

もう一度、やりたい事を説明しますと


項目A入力
↓__↑(BTABを押すと項目Aに戻る)
項目B入力
↓__↑(項目Bに戻る、入力すると結果表示に行く)
結果表示

という処理です。

EXCHAGEさんの例では結果表示はもう一ランク上で括れということですね。


*
MOVE 1 TO FOCUS-POSITION.
MOVE 2 TO FOCUS-POSITION-MAX.
MOVE SPACE TO END-STATUS.
MOVE SPACE TO WINDOW-STATUS.
*
PERFORM UNTIL END-STATUS = "P9"        ←私か追加した部分
             OR WINDOW-STATUS = "EXIT"     ←私か追加した部分
  PERFORM UNTIL END-STATUS = "P9"
             OR WINDOW-STATUS = "EXIT"
*
〜中略〜
(EXCHANGEさんの内容)
*
  END-PERFORM 
結果表示処理                ←私か追加した部分
MOVE 2 TO FOCUS-POSITION.          ←私か追加した部分
END-PERFORM.                 ←私か追加した部分
STOP RUN.                  ←私か追加した部分

9 Re:もう少しだけ直しました(その2)
EXCHANGE 2004-8-22 13:50:00  [返信] [編集]

☆ 「雛形」ではカーソルの位置の制御を、FOCUS-POSITIONで

  行っていますので、

  例えば項目Bの入力後、項目Bの再入力へLOOPさせたい場合は、 FOCUS-POSITIONを変更せずに進めるとうまくいくのでは

  ないかと思います。(間違ってたらごめんなさい)



  項目入力時に(HTAB)(BSKIP)以外のキーを押下した場合も(F9)をのぞいて同じ項目の再入力に戻ります。

 

☆ なおA−VXの場合、SKIPキーの扱いが問題かとも思います。

 経験された方はご存じと思うのですが、数字項目の表示位置が初期状態では「空白」(=文字)となるので「0」等を編集表示(例:ZZZZ−)しておかないと、いきなりSKIPを押下−−>「NON−NUMERIC」エラーになります。入力後、カンマ付編集をしている場合も(カンマが文字と見なされるので)要注意です。この辺をうまく織り込もうとすると「雛形」を使っても結構、面倒な気がします。





*
MOVE 1 TO FOCUS-POSITION.
MOVE 2 TO FOCUS-POSITION-MAX.
MOVE SPACE TO END-STATUS.
MOVE SPACE TO WINDOW-STATUS.
*
PERFORM UNTIL END-STATUS = "P9"
             OR WINDOW-STATUS = "EXIT"
*
  EVALUATE FOCUS-POSITION
    WHEN 1
          ACCEPT ACEP-A-ACP
          EVALUATE END-STATUS
            WHEN "09"
                SUBTRACT 1 FROM FOCUS-POSITION
            WHEN "01"
                DISPLAY ACEP-A-DSP
                PERFORM ACEP-A-CHECK-SUB
                IF ERR-FLAG = 1
                  THEN
                      DISPLAY ERROR-MSG-A
                  ELSE
                      ADD 1 TO FOCUS-POSITON
                END-IF
            WHEN OTHER
                CONTINUE
          END-EVALUATE
    WHEN 2
          ACCEPT ACEP-B-ACP
          EVALUATE END-STATUS
            WHEN "09"
                SUBTRACT 1 FROM FOCUS-POSITION
            WHEN "01"
                DISPLAY ACEP-B-DSP
                PERFORM ACEP-B-CHECK-SUB
                IF ERR-FLAG = 1
                  THEN
                      DISPLAY ERROR-MSG-B
                  ELSE
                      (処理結果表示)
                      (FOCUS-POSITONを1UPしない)
                END-IF
            WHEN OTHER
                CONTINUE
          END-EVALUATE
    WHEN OTHER
          CONTINUE
  END-EVALUATE
*
  IF FOCUS-POSITION = 0
    THEN MOVE 1 TO FOCUS-POSITION
  END-IF
*
  IF FOCUS-POSITION > FOCUS-POSITION-MAX
    THEN MOVE "EXIT" TO WINDOW-STATUS
  END-IF
*
END-PERFORM.

10 Re:もう少しだけ直しました(その2)
江須扇 2004-8-24 15:34:00  [返信] [編集]

EXCHANGEさん、いろいろとありがとうございます。

流れの基本は私と同じと思いましたが大きく違うところが解りました。
私はどうしてもメモリの少ない時の癖でプログラムの解りやすさより、ステップ数重視で1ステップでも少なくなる事を考えてしまいます。
保守性を考えたらわかり易さ重視の方が良いようですね。
多分、私の元のコーディングは
WHEN SWITCH−BTABで1項目の入力
WHEN SWITCH−HTABで2項目の入力
になっており意味不明という事ですね。
そうですステップ数削減で意味不明です。
3項目を作ったどうするか考えておりませんでした。
それにしてもCOBOL側でもっとステップ数のすくなくなる
命令がないのでしょうかね?
全部読む 最新50 1-100 板のトップ リロード

1 あまり見かけないソフトだが???
EXCHANGE 2004-8-7 19:34:00  [返信] [編集]

☆ こんなソフトご存じでしょうか? A−VXでも利用できるようですが。。。



 NIS−MAIL

 (URL) http://www.nis-mail.com/



全部読む 最新50 1-100 板のトップ リロード

1 コボル上で実行環境の認識
bluelion 2004-7-30 11:10:00  [返信] [編集]

本番環境とテスト環境のAVX環境があるのですが
コボルの実行時にどちらのOS(マシン)で動いているか認識する方法はあるのでしょうか?

テスト環境と本番環境ではプリンタの番号が違うため
実行時にコボル上で自動でアサインしたいためです
2 追加
BLUELION 2004-7-30 11:12:00  [返信] [編集]

テスト A-VX4 640AD

本番 A-VX2 S7200/100

でした
3 Re:コボル上で実行環境の認識
ターラヤン 2004-7-31 19:05:00  [返信] [編集]

> 本番環境とテスト環境のAVX環境があるのですが
> コボルの実行時にどちらのOS(マシン)で動いているか認識する方法はあるのでしょうか?

OS(マシン)の識別方法はわかりませんが、

私ならば、OS別に処理するよりも、テスト環境か本番環境かで分けます。
識別用ファイルを作って、そこに「テスト環境」「本番環境」や「1」「2」などを入れて
それで識別した方が現実的です。


質問内容から考えて、おそらく

IF (S7200だったら)
 xxxの処理をする
IF (640ADだったら)
 yyyの処理をする

という風なプログラムにしようとしているのではないかと思うのですが、
これでは例えば将来S7200から600xiにした時に「IF (S7200だったら)」という所を
全部「IF (600xiだったら)」に修正して再コンパイルしなければなりません。

実際のところ、どのOSかを気にする必要のある処理は、あまりないような気がします。

全部読む 最新50 1-100 板のトップ リロード

 新規投稿 | スレッド表示 | ツリー表示 | 投稿順表示 | i-mode | トップ 
« 1 ... 71 72 73 (74) 75 76 77 ... 84 »

BluesBB ©Sting_Band