教えて! goo のコンテンツに対する取り組みについて

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が何文字で宣言されているかを上の宣言文の各変数の文字数を
いちいち計算機か暗算で足し算していく以外に関数みたいな形で
知る方法はないでしょうか?
また、ないなら、それを計算するマクロを自力で作るにはどうしたら
よいのでしょうか?

gooドクター

A 回答 (5件)

1?年前COBOLプログラマでした。


今のCOBOLって関数型言語の機能を採り入れてるんですか?
自分で長さを定義したのに、それを関数で取得したい理由は何でしょうね。
ただ、単に数えるのがめんどくさいから?
昔はレコードの定義をグラフ用紙みたいのに書いて、きちんとデータ設計して
からソースを書いたものですが。それをやりたくないってことですか?
COBOLって、最初にデータ定義ありきの言語なんですが……?

私の思う答え。
COBOLにそんな関数はない。 なぜなら、IN-RECの長さはコーディング前に
仕様として決定していなければならないから。
COBOL自体にマクロはない。COBOLのソースを読んで、その数値を使うなんて
ことを考えるのは邪道である。

この回答への補足

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

補足日時:2002/08/16 13:24
    • good
    • 0

確認です。



1.集団項目定義IN-RECのサイズをプログラム中で求めたいのですか?

2.IN-BANGOなどのXタイプの変数に格納されている文字列の長さを求めたいのですか?

3.IN-BANGOなどのXタイプの変数のサイズをプログラム中で求めたいのですか?

4.質問中に出てきた”マクロ”は何を指すんですか?

この回答への補足

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

補足日時:2002/08/16 13:20
    • good
    • 0

#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桁なんて計算し  たが。 

この回答への補足

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

補足日時:2002/08/16 13:19
    • good
    • 0

ワードは使える環境だと思います。


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

いろいろ方法はありますが、Excelをお使いでしたらワークシート関数で


行うのが手軽でいいのでは?

サイズを求めるためには、
1.サイズを切り出す
2.合計を求める

という手段を踏めばできるのはわかりますよね。
合計をExcelで求めるにはSUM関数を使います。

で、厄介なのは、サイズの部分を切り出す方法です。
ワークシート関数を駆使して切り出してもかまわないのですが、
手っ取り早く行うには、括弧をカンマに置換して、CSV形式のファイルにしてしまいましょう。


ということで、手順を。

1.変数の宣言部をメモ帳などのテキストエディタに貼り付ける。
2.(と)をカンマに置換する。
3.拡張子をCSVのファイルとして保存する
4.Excelで開く
5.左から2列目がサイズの列になるので、合計を求める

てな感じでいかがでしょうか?

この回答への補足

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

補足日時:2002/08/14 15:27
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング