COBOL85でCSVファイル使用して、プログラムを組みたいのですが、SELECT句、FD句等のコーディングの仕方がわかりません。有識者の方、ご教示の程、宜しく、お願い致します。
★開発条件
・UNIX(HP-UX)環境
・日立COBOL85
・入力ファイル、出力ファイルともCSVファイル
・入力ファイル、出力ファイルともASSIGN句の定義は一回ず
つとし、レコード長が違う入力ファイル、出力ファイルの場合で
も取扱可能とし、その場合でもプログラムの修正は行わないよう
にし、汎用性を持たせる。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
FD CSV-F
RECORDING V.
01 CSV-REC.
03 REC-1.
05 CSV-LENGTH PIC 9(nn) COMP-3. <----???マニュアルで確認して下さい。
05 CSV PIC X(最大長).
03 REC-2 REDEFINES REC-1.
05 FILER X(nn). <---CSV-LENGTHのバイト数
05 CSV-BYTE PIC X(1) OCCURS 最大長.
READ CSV-Fの後でCSV-LENGTHを参照すると現在の行の文字数が入っています。
後は、CSV-BYTEの中を1バイトずつ検査しながら、CSV-LENGTHになるまで処理をする。
No.1
- 回答日時:
まず基本の処理で、以下のような売上伝票ファイル"uriage.csv"を読み取るとすると、
(HIDUKE)(KODO)(SURYO)(TANKA)
20100401,0100,002,030
20100408,0111,005,200
20100412,0140,001,890
原始プログラム抜粋
FILE-CONTROL.
SELECT URIAGE-F ASSIGN TO "uriage.csv"
ORGANIZATION IS LINE SEQUENTIAL.
* データ部
DATA DIVISION.
FILE SECTION.
FD URIAGE-F.
01 URIAGE-R.
02 HIDUKE PIC X(8).
02 PIC X(1).
02 KODO PIC 9(4).
02 PIC X(1).
02 SURYO PIC 9(3).
02 PIC X(1).
02 TANKA PIC 9(3).
として、取り扱います。LINE SEQUENTIAL を指定することで、テキストデータ末の改行までを1レコード分と見なします。
しかし、お望みのファイル処理は、フィールド数が不明かつフィールド長とデータ型(文字列か数値か)が不定のデータを扱いたいのでしょうから、
以下のようなコーディングを完成させる必要があるでしょう。
汎用CSVファイル抽出処理原始プログラム抜粋
FILE-CONTROL.
SELECT URIAGE-F ASSIGN TO "****.csv"
ORGANIZATION IS LINE SEQUENTIAL.
* データ部
DATA DIVISION.
FILE SECTION.
FD CSV-F.
01 CSV-R PIC X(80).
01 CSV-MASU REDEFINES CSV-R.
02 HITOMASU PIC 9(1) OCCURS 80.
* 汎用テーブル (1フィールド50文字分の50フィールドを100レコード分納められるテーブル)
WORKING-STORAGE SECTION.
01 汎用テーブル行 OCCURS 100.
02 汎用テーブル列 OCCURS 50.
02 汎用列文字 PIC X(50).
02 汎用列数値 PIC 9(50) REDEFINES 汎用列文字.
* 処理部においてレコード読込を繰り返し、その中でコンマごとの文字列を取り扱う。
PERFORM VARYING I FROM 開始桁 BY 1 UNTIL HITOMASU(I) = "," OR I = レコード文字数
(コンマに突き当たるか、行末になるまでの文字列の固まりを作業文字列に入れる。)
END-PERFORM
(でき上がった文字列を文字扱いか、数値扱いか判断させて、指定したフィールドに納める)
指定するフィールドの添字を1つ増やす。
といったようなことを繰り返して、プログラム上に自分なりのワークシートのようなテーブルを作り上げて処理することになるでしょう。
COBOL言語の特徴は、2進化10進数の1桁を並べて文字列化して処理する点なので、可変長データを扱うには自分で副プログラムを用意して、レコードの文字列を分解する必要があります。したがって、不定長のデータを扱うのは不向きと思われます。CSVデータを一度表計算ソフトに読み取り、各セルの書式を固定長のものにして保存したものを取り扱う手順をとるのが効率がよいでしょう。UNIX上の処理とのことですから、オープンオフィスでこの固定長化ができるか確かめたらよろしいでしょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAで特定の場所にあるCSVファイル(複数)から特定場所を抜き出してExcelに転記したいです。 11 2023/05/23 16:29
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- その他(プログラミング・Web制作) データ解析ソフトRでのファイル入力read.csvがエラーになります 7 2022/03/27 22:11
- Visual Basic(VBA) エクセルVBA 4 2022/05/14 00:51
- Excel(エクセル) CSVファイルでVBAを動かす方法 3 2023/04/04 10:22
- PHP 値の取り出し方について教えて下さい。 1 2023/03/31 13:30
- Visual Basic(VBA) tatsumaru77様 昨日回答して頂いたものです。 すみませんが、昨日の質問で1つ補足があります 1 2022/05/15 15:06
- Access(アクセス) CSVファイルの「0落ち」にVBA 6 2023/02/02 15:27
- その他(プログラミング・Web制作) Fortranでの出力ファイル 2 2023/03/21 21:25
- HTML・CSS HTMLタグのあるCSVファイルを利用する方法 4 2023/03/19 14:41
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
COBOLでCSVをインプットにして読むには・・・。
その他(プログラミング・Web制作)
-
COBOL、項目末尾に空白がある場合削除の方法その他
その他(プログラミング・Web制作)
-
COBOLで可変長ファイルの出力について教えてください。
その他(プログラミング・Web制作)
-
-
4
COBOLで文字タイプを数字タイプに変換する方法
その他(プログラミング・Web制作)
-
5
COBOL等でのHIGH_VALUEについて
IT・エンジニアリング
-
6
COBOLでの可変長定義について
その他(プログラミング・Web制作)
-
7
COBOLによる全角・半角混在→全角に
その他(プログラミング・Web制作)
-
8
COBOLの改行
その他(プログラミング・Web制作)
-
9
COBOLの基本的な事なのですが。。。
その他(プログラミング・Web制作)
-
10
COBOLについて
その他(プログラミング・Web制作)
-
11
SELECT INTOで一度に複数の変数へ代入をするにはどのようにすれがよいでしょうか?
PostgreSQL
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カンマ区切りのCSVファイルから...
-
csvファイル 項目数取得
-
バッチでCSVを処理する時、空の...
-
csvファイルでの日付設定「yyyy...
-
データ解析ソフトRでのファイル...
-
マクロから出力されるcsvのダブ...
-
<csv>複数条件で検索・抽出し、...
-
c#でcsvから指定の1行だけを読...
-
VBAでcsvファイルを読み込んで...
-
【C#】パス名で無効な文字
-
C# datagridview csv 読込
-
CSVファイル作成
-
CSV形式での保存時に”文字列...
-
複数のcsvファイルをフォルダご...
-
csvファイルのデータの間引きを...
-
C# datagridview
-
特定文字を入ってるCSVの特定の...
-
複数のCSVファイルのAccessテー...
-
複数のcsvファイルをExcelに一...
-
CSVファイルの項目行を削除...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カンマ区切りのCSVファイルから...
-
CSV形式での保存時に”文字列...
-
複数のcsvファイルをExcelに一...
-
csvファイル 項目数取得
-
csvファイルでの日付設定「yyyy...
-
バッチでCSVを処理する時、空の...
-
マクロから出力されるcsvのダブ...
-
csvファイルを列数ごとに分割す...
-
エクセル形式のファイルの読み込み
-
csvファイルのデータの一部を取...
-
エクセルVBA 大容量CSVファイル...
-
CSVファイル作成
-
EXCEL|csvで保存→開くcsvを閉じる
-
CSVファイルの項目行を削除...
-
巨大なCSVの加工(指定列のみの...
-
データ解析ソフトRでのファイル...
-
VBAでCSVファイルのデータを集...
-
【ExcelVBA】UTF-8の文字コード...
-
【C#】パス名で無効な文字
-
特定文字を入ってるCSVの特定の...
おすすめ情報