COBOL初心者です。
プログラミング自体初めて1か月です。
いかんせん本当に初心者なので
どう質問したらイイのか分からないんですがヨロシクです。
実行したらなんか固まってしまう?んです。
記述がおかしいんでしょうけど、何がおかしいのか分からなくて…
どう書けばイイのか分からないのでソースをそのまま貼り付けます。
IDENTIFICATION DIVISION.
PROGRAM-ID. 000.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT IN-FILE ASSIGN TO "x.txt".
DATA DIVISION.
FILE SECTION.
FD IN-FILE.
01 IN-REC.
03 X PIC X(10).
WORKING STORAGE SECTION.
01 WORK.
03 WK-X PIC X(10).
01 END-FLAG PIC 9 VALUE 0.
PROCEDURE DIVISION.
MAIN-SEC SECTION.
MAIN-010.
OPEN INPUT IN-FILE.
PERFORM UNTIL END-FLAG = 1
READ IN-FILE
AT END
MOVE 1 TO END-FLAG
NOT AT END
MOVE X TO WK-X
DISPLAY WK-X
END-PERFORM.
CLOSE IN-FILE.
STOP RUN.
MAIN-SEC-END.
EXIT.
なんしか、"x.txt"を読み込みたいんです。
勉強中なのでとりあえず読み込みたいデータはちっちゃくしました。
うーんどう伝えたらイイんでしょう~
よろしくお願いします。
No.3ベストアンサー
- 回答日時:
COBOLでは、OSのファイルシステムによる格納・検索効率などを意識して、{固定長|可変長}レコードで{非ブロック形式|ブロック形式 }などといった宣言を、COBOLソース中で行ったりします。
メインフレームなどでは、こういった指定の一部分を、COBOLソース中でなく、JCLで指定できるような拡張仕様を持っていたりします。また、それを実現するためのOSのファイルシステムもDAM、ISAMといった場合もあれば、より高機能なVSAMであったりします。
さらに、そういったものをアプリ側で意識させないようにしたものが、DBMSであり、階層型、ネットワーク型、リレーショナル型などが次々と実装されてきました。
OpenCOBOLで「INPUT-OUTPUT SECTION」や「FILE SECTION」のFD句などでファイル編成やレコード形式などの細かなオプションを何も指定しなかった場合、どのように扱われるかは細かくは確認していませんが、レコードの先頭の4バイト(?)がデータとして扱われないなら、その部分がブロック長やレコード長などとして認識されているのでしょう。
恐らく、固定長非ブロック形式といった宣言をCOBOL側で行えば、先頭からデータとして扱ってくれると思います。
それ以外に、端末へのLINE入出力、テキストファイルの入出力などの指定として、
「 ORGANIZATION LINE SEQUENTIAL」といった指定があります。
SELECT IN-FILE ASSIGN TO "x.txt".
を
SELECT IN-FILE ASSIGN TO "x.txt"
ORGANIZATION LINE SEQUENTIAL.
としてみてください。
この回答への補足
なんだか知らない言語まで出てきちゃいました(汗
なんだかCOBOLでテキストファイルを使うのはめんどうみたいですねぇ…
固定長非ブロック形式ってゆうのはソース内で指定する仕方gあるんですかねぇ?
あと、ORGANIZATION LINE SEQUENTIAL.
コンパイルエラーになっちゃいました(*_*)
:syntax error, unexpected ORGANIZATION, expecting $end
読み込み悪くてすみません。
少しずつ勉強シテイキマス(汗
ありがとうございます。
とても難しい~
この先もっと勉強できるのか不安になってきました(*_*)
月曜日会社のPCで実行してみます!!
No.4
- 回答日時:
#2です。
つまり、テキスト形式は改行位置が自由ですので、1行の桁数が可変ですよね。これは可変長レコードと言います。
可変長の場合は先頭の2バイト(半角文字4文字分)はレコード長格納エリアとしてデータ部分ではないと認識しているのだと思います。
ですから「△△△△ABCDEF」にすると実行したときに「ABCDEF」って読み込みまれるのだと思います。
この回答への補足
あぁ、お恥ずかしい…
#2 ってゆうのはお名前のことを言ってくれてはったんですね;
可変長レコード=ネットなどで調べてみてなんとなう分かってきました!
テキスト形式は改行位置が自由 だからしょうがない
って考えないといけないんですかね?
今は勉強のみだからこのままでイイのかな?
#2 = 可変長レコード ってことですかねぇ?
なんかせっかく教えていただいてもうまく飲み込めない自分が悔しいです(*_*)
お返事ありがとうございます。
もっと勉強しなきゃですねぇー
No.2
- 回答日時:
私は大元のCOBOL(メインフレーム用)しか知りませんが、FILE SECTIONで、FDと定義しているのですから入力は固定長ファ
イルなんじゃないですか?なのにテキストファイルをそのまま読み込むのは間違いだと思いますが・・・この回答への補足
固定長ファイル…?
なんかこのコンパイル?
改行も文字数として処理するのかな?
っとか感覚的に思ってるんですけど、、、
x.txtの方の中身を 「△△△△ABCDEF」にすると
実行したときに「ABCDEF」って読み込みましたーー
関係ないこと言ってたらゴメンナサイ
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アクセスでレポートの1印刷内...
-
固有レコード識別子の選択とは
-
ADO VBA 実行時エラー3021
-
データセットのレコード更新が...
-
DataGridViewの内容をDBに反映...
-
[VBA] ADOの Clone と AddNew
-
サブフォームに新規レコードを...
-
DataGridViewの、選択されてい...
-
Accessでレコードの更新を任意...
-
AccessVBAのMoveメソッドにつき...
-
カレントレコードが無い事を判...
-
Access のフォームで新しい行...
-
マルチレイアウト
-
ヘッダレコードとトレーラレコ...
-
ACCESS VBA テーブルデータに...
-
レコードセット(ADO.Recordset)...
-
GROUP BYを行った後に結合した...
-
実績累計の求め方と意味を教え...
-
ACCESSの集計クエリで3件ある...
-
Accessで別テーブルの値をフォ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ADO VBA 実行時エラー3021
-
ファイル書込みで一行もしくは...
-
レコードが存在しなかった場合
-
カレントレコードが無い事を判...
-
アクセスでレポートの1印刷内...
-
JSPのNULLレコード表示について...
-
DataGridViewの、選択されてい...
-
固有レコード識別子の選択とは
-
Access でレコードセレクタが押...
-
データセットのレコード更新が...
-
レコードセット(ADO.Recordset)...
-
[VBA] ADOの Clone と AddNew
-
DataGridViewの内容をDBに反映...
-
ヘッダレコードとトレーラレコ...
-
DataGridViewにてセル以外をク...
-
差し込み印刷のレコード数について
-
サブレンジ分割されたNDB(富士...
-
ACCESSで大量の更新を行うと「...
-
Access を×ボタンで閉じ...
-
[VB6]プログレスバーコントロー...
おすすめ情報