• ベストアンサー

ヘッダレコードとトレーラレコードの定義の目的について

通信プロトコルが異なるシステム間でファイルを授受する際、ファイルの送達確認として、ヘッダレコードやトレーラレコードを使用するという話を聞いたのですが、ヘッダレコードやトレーラレコードはそのような目的のために定義しているのでしょうか? (WEB上でいろいろ検索してみたのですが、そのような情報が取得できなかったので、質問しました) 全銀協フォーマットのように、ファイルフォーマットでヘッダレコードやトレーラレコードを定義している場合、データレコード以外のヘッダレコードやトレーラレコードはどのような場合に使用するのかを周りの人に聞いた際に上記の話を聞きました。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • lv4u
  • ベストアンサー率27% (1862/6715)
回答No.1

>>ヘッダレコードやトレーラレコードはそのような目的のために定義しているのでしょうか? ヘッダレコードやトレーラレコードが無くても、プログラムのロジックは作れるかもしれませんが、あるほうが以下の点で有利でしょうね。 1)データの始まりと終わりが明確になる 通信途中、あるいは処理のどこかで、明細部のデータが1件脱落した、あるいは前半部や後半部がばっさり抜けたとき、件数が一致しない、あるいはヘッダレコードやトレーラレコードが無い等で、異常がすぐわかる。 2)データフィールドが効率的に使える データ全体の情報は、明細ごとに入れると非効率です。たとえば、ある支店のデータ1万件で、銀行名、支店名のカタカナが必要な場合、全明細データに銀行名・支店名のカタカナを入れる必要はありませんね。ヘッダーレコードだけにあれば、十分です。明細データは、その空いたフィールドを別の用途に使えるようになります。 3)プログラムのロジックが簡単になる ヘッダレコードやトレーラレコードがあると、COBOL世代のプログラマの場合、慣れたロジックでプログラミングできる。 こんなところですかね。

y6g7w5t9k
質問者

お礼

ご回答ありがとうございました。 1)データの始まりと終わりが明確になる  やはり、ヘッダレコードやトレーラレコードは授受したデータの不備を確認する手段の一つになるようですね。 2)データフィールドが効率的に使える  ヘッダレコードやトレーラレコードを定義するメリットの一つになりますね。質問した時点では意識していませんでしたので、良い回答を頂けたと感謝しております。 3)プログラムのロジックが簡単になる  「慣れたロジックでプログラミングできる」というのは、どのような感じなのでしょうか?  私はプログラミング経験がほとんど無いため、具体的に説明していただいたとしても理解できないかもしれませんので、イメージ程度で構いませんので、教えて頂けないでしょうか?

その他の回答 (1)

  • lv4u
  • ベストアンサー率27% (1862/6715)
回答No.2

>>私はプログラミング経験がほとんど無いため、具体的に説明していただいたとしても理解できないかもしれませんので、イメージ程度で構いませんので、教えて頂けないでしょうか? 簡単な説明ですけど。 昔は、汎用コンピュータ上で、COBOLを使って、部別課別売り上げ一覧表というような表を沢山作っていました。現在エクセルで「課別売上小計」~「部別売上中計」~「総売上」なんてのを作ることありますが、そういう表です。 【01 関東営業部】 001 山手担当課 00112 斉藤 倫      1000 00114 安斉 かなえ    2000 00119 小沢 カオル    3000 ----------------------------------------- 001 山手担当課 小計    6000 002 下町担当課 00312 石井 まゆみ     10 00314 谷川 史子      20 00319 こうの 史代     30 ----------------------------------------- 002 下町担当課 小計     60 ========================================= 【01 関東営業部】 中計    6060 ・・・・・・・ (カラムずれはご容赦) この場合、「課コードが変わったらどうする」とか「部コードが変わったらどうする」って、コントロールブレイクっていうのですが、そのタイミングで、必要なサブルーチンに処理を飛ばしていました。 なので、こういうプログラムに慣れているプログラマは、全銀フォーマットのようなデータの区分を持つものは、慣れた処理というわけです。 なお、最近では、オブジェクト指向ってのが流行っていますが、個人的には、それ以前に「構造化プログラミング」とか「複合設計」など、ちょっと古いと思われている技術をマスターしてほしいと思ったりします。 このあたりを知らないプログラマが、「VBで○○集計一覧表のロジックをどう作ればいいかわからない!」って悩んでいたりする場面に出くわすことがあります。 P.S. その昔、3000ページ入りのB4用紙の段ボール箱で、毎月30箱とか40箱分(もっとかも?)売上レポートとして印刷していました。フロアにずらりと並んだ印刷済みの箱は、ちょっと異常な感じでしたね。プリンタの値段は2億円とか言っていました。

y6g7w5t9k
質問者

お礼

ご回答ありがとうございました。 文章だけではなく、表イメージを付けて頂いたのでイメージが掴めた気がしています。 >プリンタの値段は2億円とか言っていました。  費用削減とか、ペーパーレス化の現在では、なかなかお目にかかる機会は無いかもしれませんね。 いろいろな補足情報も提供して頂き、ありがとうございました。

関連するQ&A

  • 全銀フォーマットで使用する各レコードの目的について

    全銀フォーマットは、以下のレコードで構成されています。 (1)ヘッダーレコード (2)データレコード (3)トレーラレコード (4)エンドレコード (2)データレコードは処理対象となるデータを保有することになるので、当然必要となるのですが、(1)(3)(4)のレコードは何を目的として設けられているのかを知りたいと思っています。 また、目的と同様になるかと思いますが、当該ファイルフォーマットを処理する場合に注意すること(入力チェックとしては、どのようなチェックが必要であるか等)も知りたいです。 ネット上で検索していましたが、各レコードの目的については思うような情報が得られなかったため、質問しました。よろしくお願いします。

  • 全銀協のレコードが可変長の場合

    全国銀行協会の本「全銀協標準通信プロトコル(平成21年2月)」の 127ページ「レコードが可変長の場合」のTTCの次にある「LL」はなんの略かわかりますか。 教えてください。

  • レコード件数、レコード長の分からない文字列配列の定義の仕方

    あるファイルを読み込み、文字列配列に格納しようと思うのですが、 データが数件の場合もあれば、数万件の時もあるので、 数件の時にも数十万件の領域を確保しておくのは抵抗があります。 そこで一度読み込んでレコード件数、レコード長を取得し callocやmallocなどを使い、領域を定義しようと思うのですが、 どのように定義すればよいかわかりません。 char **testData; を定義してmallocを使用しようと思いましたが、その方法を教えてください。

  • COBOLでの可変長定義について

    unix環境下でCOBOL85を使用しています。 あるデータを可変長でWRITEしていくのですが、 データにヘッダー情報みたいなものが付加されてしまい困っています。 ヘッダー情報を付加しないようにするにはどうすればいいのでしょうか? 定義:  FD Aファイル RECORD IS VARYING 1 TO 100 DEPENDING ON A-CNT.  01 A-DATA PIC X(100). とか  FD Aファイル RECORD IS VARYING IN SIZE DEPENDING ON A-CNT.  01 A-DATA PIC X(100). というパターンで試しています。 Aファイルにaaaという3バイトデータをWRITEすると、 COBOL85020315020304・・・・・aaaというデータが出力されます。 あるコボラーに聞くと「定義がおかしいからでしょう」と言ってたのですが、 どうおかしいかは本人もわからないようです。 どうすればヘッダー情報(COBOL85020315020304・・・・・)がつかず、 可変長でWRITEできるのでしょうか?教えて下さい。

  • 関数の実体定義にヘッダファイルの2重定義防止方法が効かない?

    いつもお世話になっています。 MFCでCプログラミングをしています。 ヘッダファイルの2重定義防止のために、 ヘッダファイル全体を下記のように 囲みました。 <aaa.h> #ifndef AAA #define AAA #define PI 3.141592 void Func(); int wa(int a, int b){ return a+b; } #endif ビルドしたところ、 関数宣言(Func)や#define部分(PI)については、 2重定義が防止されているようなのですが、 関数の実体部分(関数wa)については、 2重定義防止機能が働かず、 ***.obj : error LNK2005: "int __cdecl wa(int a, int b)" は既に ***.obj で定義されています。 というリンクエラーが表示されます。 関数の種類や ヘッダファイル内の宣言の順番を いろいろ変えてみたのですが同じ結果でした。 ここで、このヘッダファイルの先頭に #pragma onceを使用すると このリンクエラーは回避されるのですが、 他コンパイラとの互換性の観点から、 #pragma once以外の方法で実現する必要があるので、 困っています。 URLを検索してみたのですが、 このような特殊な場合について記述されているものは 見つけられませんでした。 どなたか解決法又はヒントをご教示頂ければ ありがたいです。 よろしくお願いします。

  • TCPヘッダのヘッダ長について

    誰か知っていましたら御教示ください。 TCPヘッダのヘッダ長は,通常5または6を使用するものだと考えてました 7を使用するのは,どのような場合でしょうか? なぜこのような質問するかは,以下のことをおこなって専用制御装置とPCでTCP/IPの通信が出来なくなっためです。 (1)PC側のOSを winNT→2Kへ変えたところ専用制御装置との通信断となりました。 (2)イーサアナライザで解析したらPCからのSYN送信にてTCPヘッダにおけるヘッダ長がNTの時は,6(24バイト)なのにwin2Kでは,7(28バイト)になった (3)専用制御装置側はTCPヘッダのヘッダ長7は,エラーと判定し通信しない設計になってました (4)PCのアプリはwinsockの単なるソケット通信 そのため,TCPヘッダを書き換えることはできません (5)おそらくOSがwin2Kになったことが原因だと思います。 win2KでwinNTの時のように SYN送信でTCPヘッダのヘッダ長を6にする方法は,あるのでしょうか? 大変恐縮ですが誰か御回答ください。

  • C言語のヘッダファイルの使い方

    ヘッダファイルの使い方について質問です。 ソースファイルA、ソースファイルBで共有して使用したい変数がある場合、 Aでは「int a」と宣言し、Bでは「extern int a」と宣言すれば 同じ変数を共有出来ると認識しています。 それをヘッダファイルへ記述しておきたい場合にはどのように 宣言しておけば良いのでしょうか? ヘッダファイルに「int a」と宣言した場合は両方のソースファイルで includeした時に多重定義でエラーとなります。 では「extern int a」と宣言しておいて、両方のソースファイルで includeするのが正しいのでしょうか? 初歩的な質問で申し訳ないですが、有識者の方、教えてください。

  •  namespace定義の使い方

     こんにちは。 C++を勉強しています。 今回は、namespace宣言して使いたいのですが、ヘッダー内でnamespace宣言をすると重複してしまいます。namespaceで定義したものを他のファイルでも使いたい場合はどうすればいいでしょうか? よろしくお願いします。

  • CSVデータについての質問です。

    現在、EXCELのマクロを使用して会計システムに取込むCSVデータを作成しております。 データフォーマットを見るとディテール(細かなデータ)をヘッダーとトレーラーで挟み込む形になっています。 ヘッダーは3列、ディテールは20列、トレーラーは5列です。 これらをCSV形式で作成し、メモ帳を開くと以下のようになります。 <例> 1,200,090,624,2,,,,,,,,,,,,,,,(←ヘッダー) 2,1,2415,2415,0,1,2009,802,1915,,0,0,1,1,,1,1915,1915,111,200908 2,1,3125,3125,0,1,2009,802,2225,,0,0,1,1,,1,2225,2225,111,200908 2,1,3233,3233,0,1,2009,802,1563,,0,0,1,1,,1,1563,1563,111,200908 8,84,435053,0,0,,,,,,,,,,,,,,,(←トレーラー) このように20列に満たない分、ヘッダーとトレーラーに,(カンマ)が入ってしまい、この部分に,(カンマ)があるとデータを取込めません。 この部分のカンマを取るマクロがあれば教えていただきたいのですが。 よろしくお願いします。

  • ファイルメーカー、スクリプトで全レコード削除させるには?

    ファイルメーカーProを、1カ月前から始めた 初心者です。 使用環境:WindowsXP、ファイルメーカーPro6 スクリプトの定義で、全レコード削除をさせたいと 思います。 スクリプトの編集の中に、「全レコード削除」が ありません。 スクリプトの中で「全レコード削除」させる仕方を 教えて下さい。

専門家に質問してみよう