• 締切済み

COBOLで変数が何文字で宣言されたかを取得する方法

COBOLで、例えば 01 IN-REC. 02 IN-BANGO PIC X(05). 02 IN-SHIMEI PIC X(15). …(100個続く)… 02 IN-CLASS PIC X(10). 02 IN-SEISEKI. 03 IN-SUGAKU PIC 9(03). 03 IN-EIGO PIC 9(03). …(続く)… 03 IN-KOKUGO PIC 9(03). となっていたとします。このとき、プログラム中で IN-RECが何文字で宣言されているかを上の宣言文の各変数の文字数を いちいち計算機か暗算で足し算していく以外に関数みたいな形で 知る方法はないでしょうか? また、ないなら、それを計算するマクロを自力で作るにはどうしたら よいのでしょうか?

みんなの回答

回答No.5

1?年前COBOLプログラマでした。 今のCOBOLって関数型言語の機能を採り入れてるんですか? 自分で長さを定義したのに、それを関数で取得したい理由は何でしょうね。 ただ、単に数えるのがめんどくさいから? 昔はレコードの定義をグラフ用紙みたいのに書いて、きちんとデータ設計して からソースを書いたものですが。それをやりたくないってことですか? COBOLって、最初にデータ定義ありきの言語なんですが……? 私の思う答え。 COBOLにそんな関数はない。 なぜなら、IN-RECの長さはコーディング前に 仕様として決定していなければならないから。 COBOL自体にマクロはない。COBOLのソースを読んで、その数値を使うなんて ことを考えるのは邪道である。

stateSpace
質問者

補足

なるほど。COBOLはそういう設計思想に基づいて作られた言語なんですね。HPLでは変数のサイズを求めることができるのにCOBOLではなぜできないんだろうと思ったのです。

すると、全ての回答が全文表示されます。
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.4

確認です。 1.集団項目定義IN-RECのサイズをプログラム中で求めたいのですか? 2.IN-BANGOなどのXタイプの変数に格納されている文字列の長さを求めたいのですか? 3.IN-BANGOなどのXタイプの変数のサイズをプログラム中で求めたいのですか? 4.質問中に出てきた”マクロ”は何を指すんですか?

stateSpace
質問者

補足

1.はい。 2.いいえ。 3.はい。 4.会社の先輩はよくマクロという言葉を使うのですが、もしかしたらマクロというものは存在しないのかもしれません。とりあえず、変数(または集団項目)を引数としてその変数(または集団項目)が何文字で定義されているかを返すプログラムという意味でお願いします。

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.3

#2のものですが、#1の補足を読むとまだ質問の意味が良くわからない。 (1)「\IN-RECが何文字で宣言されているかを」を見ると    01 aaa 02 bb pic x(8). とあったとして、実行中に「8」を捉えたいと言うこと    に採れる。 (2)「言語には変数に格納されている文字数を取得する関数   が存在します。」(#1補足部分)    これならLength(x)(x:英数字型)があるよ   うですが、まさかコンな質問ではあり得ない。 (3)今実行中のあるときに、ある変数の文字列内容について    半角(1バイト)文字や2バイト文字(漢字)各種が    混合していて、それぞれ1字とカウントした字数とかで   すか。 (4)ある変数は格納されるインプットエリアの先頭、ファイ   ル定義書(LayoutForm)の、ファイル先     頭から何バイト目かを(上記ではbbというフィールド   は先頭より何バイト目かが)わかれば良いのですか。   コーディングより先行して、バイト単位ののファイル   レイアウトフォームが出来あがっているのでは。コーダー   が多量の計算をしなくてもそれで判る。   昔はそれを見て80桁/一行×7行+23桁なんて計算し  たが。 

stateSpace
質問者

補足

回答ありがとうございます。 (1)の意味で解釈お願いします。

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.2

ワードは使える環境だと思います。 WINDOW環境にあって、COBOLのソースを範囲指定してコピーできるなら、ワードの文書に貼りつけて、ツール-文字のカウントで出てくるのではないでしょうか。 あるいは、テキスト形式にCOBOLソースを落とせるなら、エクセルの関数利用よりワードに読みこませて上記操作でやるのが簡単と思います。

すると、全ての回答が全文表示されます。
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

いろいろ方法はありますが、Excelをお使いでしたらワークシート関数で 行うのが手軽でいいのでは? サイズを求めるためには、 1.サイズを切り出す 2.合計を求める という手段を踏めばできるのはわかりますよね。 合計をExcelで求めるにはSUM関数を使います。 で、厄介なのは、サイズの部分を切り出す方法です。 ワークシート関数を駆使して切り出してもかまわないのですが、 手っ取り早く行うには、括弧をカンマに置換して、CSV形式のファイルにしてしまいましょう。 ということで、手順を。 1.変数の宣言部をメモ帳などのテキストエディタに貼り付ける。 2.(と)をカンマに置換する。 3.拡張子をCSVのファイルとして保存する 4.Excelで開く 5.左から2列目がサイズの列になるので、合計を求める てな感じでいかがでしょうか?

stateSpace
質問者

補足

回答ありがとうございます。 質問文が説明不足でした。 たいていの言語には変数に格納されている文字数を取得する関数が存在します。 COBOLにもそういった関数が無いか?という質問です。 あくまでCOBOLという言語の範囲内で処理を行ないたいのです。 また、上記の関数がないとすれば、自力で作ることはできますか? どのようなアルゴリズムになるのでしょうか?

すると、全ての回答が全文表示されます。

関連するQ&A