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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
10代と話して驚いたこと
先日10代の知り合いと話した際、フロッピーディスクの実物を見たことがない、と言われて驚きました。今後もこういうことが増えてくるのかと思うと不思議な気持ちです。
-
家・車以外で、人生で一番奮発した買い物
どんなものにお金をかけるかは人それぞれの価値観ですが、 誰もが一度は清水の舞台から飛び降りる覚悟で、ちょっと贅沢な買い物をしたことがあるはず。
-
「覚え間違い」を教えてください!
私はかなり長いこと「大団円」ということばを、たくさんの団員が祝ってくれるイメージで「大円団」だと間違えて覚えていました。
-
昨日見た夢を教えて下さい
たまにすごいドラマチックな夢見ること、ありませんか? 起きてからも妙に記憶に残っているような、そんな夢。
-
ギリギリ行けるお一人様のライン
おひとり様需要が増えているというニュースも耳にしますが、 あなたが「ギリギリ一人でも行ける!」という場所や行為を教えてください
-
COBOLでCSVをインプットにして読むには・・・。
その他(プログラミング・Web制作)
-
COBOLの改行
その他(プログラミング・Web制作)
-
COBOLで可変長ファイルの出力について教えてください。
その他(プログラミング・Web制作)
-
-
4
COBOLでのNOT = の AND条件
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カンマ区切りのCSVファイルから...
-
エクセルVBA 大容量CSVファイル...
-
複数のcsvファイルをExcelに一...
-
CSV形式での保存時に”文字列...
-
マクロから出力されるcsvのダブ...
-
CSVファイルの項目行を削除...
-
【エクセル マクロ】読み込ん...
-
wshでcsvファイルのソートを行...
-
VBAでcsvファイルを読み込んで...
-
バッチでCSVを処理する時、空の...
-
複数のcsvファイルをフォルダご...
-
ADODBでSQL実行前にレコードセ...
-
csvファイルのデータの一部を取...
-
データ解析ソフトRでのファイル...
-
csvファイル 項目数取得
-
複数のCSVファイルのAccessテー...
-
VBScriptでcsvファイルの編集は...
-
vb2010でCSVファイルを並び替え...
-
csvファイルのデータの間引きを...
-
csvファイルを列数ごとに分割す...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カンマ区切りのCSVファイルから...
-
バッチでCSVを処理する時、空の...
-
csvファイル 項目数取得
-
マクロから出力されるcsvのダブ...
-
CSV形式での保存時に”文字列...
-
【C#】パス名で無効な文字
-
エクセルVBA 大容量CSVファイル...
-
データ解析ソフトRでのファイル...
-
CSVファイル作成
-
VBAでcsvファイルを読み込んで...
-
複数のcsvファイルをExcelに一...
-
CSVファイルの項目行を削除...
-
csvファイルでの日付設定「yyyy...
-
複数のCSVファイルのAccessテー...
-
エクセル形式のファイルの読み込み
-
csvファイルを列数ごとに分割す...
-
【エクセル マクロ】読み込ん...
-
VBAでCSVファイルのインポート...
-
【ExcelVBA】UTF-8の文字コード...
-
csvファイルのデータの間引きを...
おすすめ情報