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が何文字で宣言されているかを上の宣言文の各変数の文字数を
いちいち計算機か暗算で足し算していく以外に関数みたいな形で
知る方法はないでしょうか?
また、ないなら、それを計算するマクロを自力で作るにはどうしたら
よいのでしょうか?
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
いろいろ方法はありますが、Excelをお使いでしたらワークシート関数で
行うのが手軽でいいのでは?
サイズを求めるためには、
1.サイズを切り出す
2.合計を求める
という手段を踏めばできるのはわかりますよね。
合計をExcelで求めるにはSUM関数を使います。
で、厄介なのは、サイズの部分を切り出す方法です。
ワークシート関数を駆使して切り出してもかまわないのですが、
手っ取り早く行うには、括弧をカンマに置換して、CSV形式のファイルにしてしまいましょう。
ということで、手順を。
1.変数の宣言部をメモ帳などのテキストエディタに貼り付ける。
2.(と)をカンマに置換する。
3.拡張子をCSVのファイルとして保存する
4.Excelで開く
5.左から2列目がサイズの列になるので、合計を求める
てな感じでいかがでしょうか?
この回答への補足
回答ありがとうございます。
質問文が説明不足でした。
たいていの言語には変数に格納されている文字数を取得する関数が存在します。
COBOLにもそういった関数が無いか?という質問です。
あくまでCOBOLという言語の範囲内で処理を行ないたいのです。
また、上記の関数がないとすれば、自力で作ることはできますか?
どのようなアルゴリズムになるのでしょうか?
No.2
- 回答日時:
ワードは使える環境だと思います。
WINDOW環境にあって、COBOLのソースを範囲指定してコピーできるなら、ワードの文書に貼りつけて、ツール-文字のカウントで出てくるのではないでしょうか。
あるいは、テキスト形式にCOBOLソースを落とせるなら、エクセルの関数利用よりワードに読みこませて上記操作でやるのが簡単と思います。
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桁なんて計算し たが。
No.4
- 回答日時:
確認です。
1.集団項目定義IN-RECのサイズをプログラム中で求めたいのですか?
2.IN-BANGOなどのXタイプの変数に格納されている文字列の長さを求めたいのですか?
3.IN-BANGOなどのXタイプの変数のサイズをプログラム中で求めたいのですか?
4.質問中に出てきた”マクロ”は何を指すんですか?
この回答への補足
1.はい。 2.いいえ。 3.はい。
4.会社の先輩はよくマクロという言葉を使うのですが、もしかしたらマクロというものは存在しないのかもしれません。とりあえず、変数(または集団項目)を引数としてその変数(または集団項目)が何文字で定義されているかを返すプログラムという意味でお願いします。
No.5
- 回答日時:
1?年前COBOLプログラマでした。
今のCOBOLって関数型言語の機能を採り入れてるんですか?
自分で長さを定義したのに、それを関数で取得したい理由は何でしょうね。
ただ、単に数えるのがめんどくさいから?
昔はレコードの定義をグラフ用紙みたいのに書いて、きちんとデータ設計して
からソースを書いたものですが。それをやりたくないってことですか?
COBOLって、最初にデータ定義ありきの言語なんですが……?
私の思う答え。
COBOLにそんな関数はない。 なぜなら、IN-RECの長さはコーディング前に
仕様として決定していなければならないから。
COBOL自体にマクロはない。COBOLのソースを読んで、その数値を使うなんて
ことを考えるのは邪道である。
この回答への補足
なるほど。COBOLはそういう設計思想に基づいて作られた言語なんですね。HPLでは変数のサイズを求めることができるのにCOBOLではなぜできないんだろうと思ったのです。
補足日時:2002/08/16 13:24お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) COBOL数値転記をCOPY句内での仕様 6 2022/06/15 18:48
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- 英語 Osteogenesis in group B and C were significantly l 2 2022/03/24 05:27
- C言語・C++・C# numpyスライス機能を使った数値計算 2 2023/05/08 16:01
- 英語 Because growth factors regulate abundance of micro 1 2022/03/28 10:12
- 英語 一般を表す言葉を補って能動態で受動態を書き換える 5 2022/08/14 16:13
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- その他(プログラミング・Web制作) ColabでのPytorchのエラー 1 2022/11/19 20:51
- 英語 There are various anatomical and mucogingival cond 3 2022/05/05 10:28
- その他(プログラミング・Web制作) python flask から fastapiへの移行時のエラー対処 1 2023/02/05 12:26
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
10Mバイトて文字数に すると何...
-
ビットスワップとバイトスワッ...
-
UTF-8で5~6バイトになる文字コ...
-
char str[256]の256の意味は?
-
バイト列とバイナリ列の違いが...
-
VB 2008: LenB関数の代行機能は...
-
PHP 文字列抽出
-
バイナリとBCDコード
-
「1TB」のHDDに日本語は何字入...
-
全角半角を調べるライブラリ関...
-
シフトJISの2バイト文字
-
最大長を用意せずにバイナリデ...
-
unicode←→JISコード
-
iconv変換後のサイズについて
-
任意のアルファベットの2進表...
-
Visual C++ 2008 Express Editi...
-
VBでShift_JISへurlエンコード...
-
memcmp バイナリデータの比較方法
-
UTF-8とUTF-16について質問です。
-
ポインター引数の関数でコンパ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10Mバイトて文字数に すると何...
-
UTF-8で5~6バイトになる文字コ...
-
char str[256]の256の意味は?
-
エクセルシート名の制限を変更...
-
COBOLのCOMP形式について
-
バイナリとBCDコード
-
バイト列とバイナリ列の違いが...
-
ビットスワップとバイトスワッ...
-
ピクセル,dpiから容量(バイト...
-
SQLで1バイト、2バイト混在...
-
Javaで日本語1文字のバイト数
-
「1TB」のHDDに日本語は何字入...
-
機種依存文字をチェックしたい。
-
VBAでShift-JISのURLエンコード
-
GetWindowTextでアドレスバーか...
-
COBOL PICTUREで X,S,Vの意味
-
【VB2005】テキストボックス内...
-
URLは最高何文字まで可能なので...
-
1KBが1024byteな理由
-
ワイド文字のバイト数が取得で...
おすすめ情報