• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:マッチング処理(1:N))

マッチング処理(1:N)でうまくいかない場合の対処方法は?

このQ&Aのポイント
  • マッチング処理(1:N)をcobol(easy)で実装していますが、ファイル内に重複があり結果がうまくいきません。大小比較ではうまくいかないため、(=と^=)でマッチングする方法を教えてください。
  • 初期リード(マスタ、トラン)の後において、key1 < key2の場合はマスタ出力し、マスタ読み込みを行い、key1 > key2の場合はトラン出力し、トラン読み込みを行います。key1 = key2の場合はkey1とkey2が一致するまでループし、マスタリードとトランリードを行います。
  • 変更前のマスタと変更後のトランのデータを比較すると、0002と0003のレコードが変更され、0005が追加されています。

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

  • ベストアンサー
  • skbler
  • ベストアンサー率9% (69/692)
回答No.1

ロジックのアドバイスということで! 修正されていないであろう読み込んだマスタで、新たなコピー区を作成!それが、1対Nの1ということですね? N個あるファイルとマッチングをする際の記述例は、あらかじめ処理を定義しておくのです。 PERFORM UNTIL key1 ^= 999999 AND key2 ^= 99999  IF key1 > key2 PERFORM A IF key1 < key2 PERFORM B IF key1 = key2 PERFORM C END PERFORM. 大小(=,<,>)比較で条件分岐が発生するわけですから、自ずから違う処理も発生するハズかと思われます。はじき出すデータを確保する場所も、異なるでしょうし。

deaimax
質問者

お礼

ありがとうございます データがJCLでキーの比較(<>=)できないので 一度テーブルを作って =とnot =で判定したら結果でました。最後の レコード(// )がうまくいきませんが 影響はないのでなんとかなりそうです。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • マッチングの簡素化

    どなたかご存じでしたら回答をお願いします。 ナンバーズ3やナンバーズ4の予想をする上で、 下記の手順でマスターにしか存在しない予想数字を、 ボタンを押下したら、(3)の結果だけが出てくるようにするには エクセルVBAではどのようなコーディングでできますか? これまでは、VLOOKUP等の関数を使用してましたが、 毎回、毎回セルに予想数字を貼りつけて、関数も貼りつける作業が 面倒くさくなり、エクセルでシート予想数字の貼り付け後は、 ボタン押下したらマッチング結果がでてくるものが作りたく質問しました。 (1)こだわりの予想数字が入ったシート。【マスター】  : 056 067 078 089 125 126 127 128 129 145 156 167 178 189 235 236  : (2)WEBサイトにある予想数字を貼りつけたシート【トラン】  : 056 069 083 085 136 138 158 174 178 194 196 236 247 249 269 285  : (3)(1)に対して(2)の数字をマッチングして(1)のみに存在する結果を出力する。 056 178 236 【注意事項】  ・(1)、(2)ともそれぞれの予想数字の中には重複は無しとします。  ・(1)、(2)とも昇順に並べてある状態とします。  ・(1)、(2)とも件数は最大999件とします。  ・(1)、(2)、(3)それぞれシートは別れていても、同じ1枚のシートでもどちらでもよいです。  ・エクセルVBAと言いましたが、予想数字をシートに貼り付ける作業以外は自動になれば   やり方は問いません。   ・エクセル2007を使用します。 以上、よろしくお願いします。

  • サブフォームで自動採番

    お世話になります。ACCESS2000で制作しています 主テーブル(マスタ)に顧客コード(主キー)、 サブテーブル(トラン)に顧客コードと枝番 というフィールドがあります。 顧客コードでリレーションシップを結んでいます。 それぞれのテーブルからクエリを経てフォームをつくり (Q_マスタ→F_マスタ、Q_トラン→F_トラン) また、検索フォームも別に作っています。 F_トランはF_マスタに埋め込んでいます。 検索フォームで検索して該当するデータが無い場合 DoCmd.OpenForm "F_マスタ", , , , acFormAdd で新規フォームを呼び出します。 このときサブフォームの枝番に自動的に「1」を入れたいのですが (開く時でも読み込み時でもいつでもいいのですが) どうしたら良いのでしょうか? ちなみに今は サブフォームのプロシージャで Private Sub Form_Open(Cancel As Integer)  If Me.NewRecord Then   Me![枝番] = 1  Else   Me![枝番] = DMax("枝番", "Q_トラン") + 1  End If End Sub としています。 こうするとQ_マスタの一番上のデータが 例えばQ_トランレコードを2つ持っていると 「3」と出てしまいます。 どのようにすればいいのでしょうか。 よろしくお願いします。

  • Excel複数テーブルのマッチング処理について

    実現したいことは、以下のような形式で3つの表があり、A列をキーとして添付の結果1、結果2のような出力を別シートに行なうことです。 マッチング処理なのですがなかなか考えがまとまりません。 おそらく関数では難しくVBAで処理するのだろうかと思いますが、経験が浅く手詰まり状態です。 恐れ入りますがご指南のほどよろしくお願いします。 要件と致しましては、 1.A列がキー項目となります。 2.表1、2、3とも列数は固定です。 3.表1はキー(A1、A2)に対し行が一意です。(マスター) 4.表2、3はキー(A1、A2)に対し行が複数行存在します。(必ず1行以上は存在します) 5.上記の場合、添付結果1または結果2のように表示したい。 ・A列は値が重複しても同じ値を表示します。 ・A列以外は値が重複した場合空欄を表示します。 ・列の長さは同一キー項目で一番行数が多いものとなります。 5番の要件で苦慮しています。どうかよろしくお願い致します。 ----------------------------- 表1 A列、B列、C列、D列、E列 A1 ,B1 ,C1 ,D1 ,E1 A2 ,B2 ,C2 ,D2 ,E2 表2 A列、F列、G列 A1 ,F1 ,G1 A1 ,F11 ,G11 A2 ,F2 ,G2 A2 ,F22 ,G22 A2 ,F222 ,G222 表3 A列、H列 A1 ,H1 A1 ,H11 A1 ,H111 A2 ,H2 A2 ,H22 A2 ,H222

  • awkのパターンマッチングについて。

    特定web siteからfileをdownload後にファイルのmd5値 およびsha-1値をtextに抽出(出力)させたいと考えてます。 全体の流れとしては以下になります。 (1)web pageをfileとして保存 (2)htmlをtxtに変更しtext editerにてgrep ※grepに使用するキーはhttpsにすると下記情報が一行ず つ出力されます。 <tr><td><a href="https://download.xxxxxxxxxxxxxxxx"> href="#" title="MD5|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" href="#" title="SHA-1|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" (3)上記をキーとしてawkからテキストに出力 ご質問させていただきた点は(3)のawkの部分です。 Forawk.exeを使用して実行したいのですがパターンマッチングが分かりません。 以下key選択方法についてご教示の程お願いします。 (1) httpsから始まるリンクを$1 (2) "MD5|"から始まる32行の乱数を$2 (3) "sha-1|"から始まる40行の乱数を$3 print $1 " " $2 " " $3 でうまく表示できるのではないかと考えています。 その他良い案等ありましたら合わせてご提示の程お願いします。

  • 教えてくだい

    教えてください。お願いします。 出力されるものは何でしょうか?B$は リンゴ、そのあとRESTOREでレモンに戻ってD$がレモンになるか、D$はミカンが出力されるかどちらでしょうか? 100 READ A$ 110 READ B$ 120 READ C$ 130 RESTORE 140 READ D$ 150 PRINT B$,D$ 160 DATA レモン,リンゴ 170 DATA ミカン,スイカ 180 END

  • COBOL 1:1のマッチングについて

    こんばんは。プログラム作成が行き詰ってしまったので、 アドバイス頂けると幸いです。 要件:マスタから名前を検索する 出力番号、名前、合計点の3つ 【マスタファイル】 生徒番号  名前 (数字3桁) (全角6文字)   ・       ・   ・       ・   ・       ・ 【トランザクションファイル】 生徒番号   合計点 (数字3桁)  (数字3桁)   ・       ・    ・       ・ 【出力ファイル】 生徒番号 氏名 合計点 001 ○○  □□ DATA DIVISION. FILE SECTION. FD INFILEM. 01 INRECM. 05 IM-ID PIC X(03). 05 IM-NAME PIC X(12). FD INFILET. 01 INRECT. 05 IT-ID PIC X(03). 05 IT-GOUKEI PIC 9(03). FD OUTFILE. 01 OUTREC. 05 O-ID PIC X(03). 05 O-NAME PIC X(12). 05 O-GOUKEI PIC ZZ9. WORKING-STORAGE SECTION. 01 WM-ID PIC X(03). 01 WT-ID PIC X(03). 01 W-GOUKEI PIC 9(03). PROCEDURE DIVISION. PERFORM MAE-SHORI THRU MAE-SHORI-EXIT PERFORM SHU-SHORI THRU SHU-SHORI-EXIT UNTIL WM-ID = HIGH-VALUE AND WT-ID = HIGH-VALUE PERFORM ATO-SHORI THRU ATO-SHORI-EXIT STOP RUN. MAE-SHORI. OPEN INPUT INFILEM INFILET OUTPUT OUTFILE MOVE SPACE TO WM-ID MOVE SPACE TO WT-ID READ INFILEM AT END MOVE HIGH-VALUE TO WM-ID END-READ IF WM-ID NOT = HIGH-VALUE THEN MOVE IM-ID TO WM-ID END-IF READ INFILET AT END MOVE HIGH-VALUE TO WT-ID END-READ IF WT-ID NOT = HIGH-VALUE THEN MOVE IT-ID TO WT-ID END-IF. MAE-SHORI-EXIT. EXIT. SHU-SHORI. IF WM-ID = WT-ID THEN PERFORM KOUSHIN THRU KOUSHIN-EXIT ELSE IF WM-ID < WT-ID THEN PERFORM SHUTURYOKU THRU SHUTURYOKU-EXIT ELSE PERFORM ERRORS THRU ERRORS-EXIT END-IF END-IF. SHU-SHORI-EXIT. EXIT. KOUSHIN. MOVE IT-GOUKEI TO W-GOUKEI MOVE IM-ID TO O-ID MOVE IM-NAME TO O-NAME MOVE W-GOUKEI TO O-GOUKEI WRITE OUTREC READ INFILEM AT END MOVE HIGH-VALUE TO WM-ID END-READ IF WM-ID NOT = HIGH-VALUE THEN MOVE IM-ID TO WM-ID END-IF READ INFILET AT END MOVE HIGH-VALUE TO WT-ID END-READ IF WT-ID NOT = HIGH-VALUE THEN MOVE IT-ID TO WT-ID END-IF. KOUSHIN-EXIT. EXIT. SHUTURYOKU. MOVE IM-ID TO O-ID MOVE IM-NAME TO O-NAME MOVE W-GOUKEI TO O-GOUKEI WRITE OUTREC READ INFILEM AT END MOVE HIGH-VALUE TO WM-ID END-READ IF WM-ID NOT = HIGH-VALUE THEN MOVE IM-ID TO WM-ID END-IF. SHUTURYOKU-EXIT. EXIT. ERRORS. DISPLAY "** ERROR ** IM-ID=" IM-ID " IT-ID=" IT-ID READ INFILET AT END MOVE HIGH-VALUE TO WT-ID END-READ IF WT-ID NOT = HIGH-VALUE THEN MOVE IT-ID TO WT-ID END-IF. ERRORS-EXIT. EXIT. ATO-SHORI. CLOSE INFILEM INFILET OUTFILE. ATO-SHORI-EXIT. EXIT. 上記のソースで実行すると 番号 名前 2桁の謎の数字が1レコードとしてでてきてしまいます。 詳しい方、ご教示くださいませ。

  • 【COBOL】read文でエラー

    COBOLで以下のエラーが発生しています。 ↓ xxファイルの'READ'文で,実行順序の誤りが発生しました.'AT-END '. PGM=xx. LINE=xxx PGの内容としては、 2つのinputファイルを読み込み、マッチング処理を行ってoutputするという処理です。 エラー行数は、2つ目のinputファイルをreadするところでエラーとなっています。 2つの異なったファイルをreadすることができないのでしょうか。 どこがNGなのかわかりません。 追記すべき箇所があれば記載します。 アドバイスをお願いします。

  • COBOLでこんなプログラムをつくりたいです

    COBOLを使ってこんなプログラムを作りたいです トランザクションファイルに店コード 売り上げ (01 100万  01 100万  01 100万  02 120万  04 140万)などが入っている マスターファイルに店コード 店名が入っている (01 大阪店  02 名古屋店  03 札幌店  04 東京店)など この2つのファイルを使って以下のファイルを出力する方法を教えてください。 出力ファイル 店名 売り上げ (大阪店 100万円  大阪店 100万円  大阪店 100万円) 注意:出力ファイルには、一致するコードをすべて 出力するのではなく、01の大阪店のみをすべて出力したいです。 ●SERCHを使いたいです ~~~~~~~~~~~~~~~~~ SET IDX 1 SERCH □□□ AT END エラー処理 WHEN ○○○=△△△(IDX) これは、2つのファイルが一致するすべてを出力してしまいます。 求めたいのは、一部のコード(01)のときだけです。 どうすればいいですか? 前提として、トランザクションファイルをすべて読み込みます。 マスターファイルは、テーブルにすべて読み込みます。 ~~~~~~~~~~~~~ 自分の見解 SERCHをやってトランザクションファイルとマスターファイルとが一致するのを探して一致する場合、さらに01か判断するような感じになると思うんですが・・・ 実際に簡単にプログラムを書いていただけるとうれしいです。

  • COBOL

    COBOLを使ってこんなプログラムを作りたいです トランザクションファイルに店コード 売り上げ (01 100万  01 100万  01 100万  02 120万  04 140万)などが入っている マスターファイルに店コード 店名が入っている (01 大阪店  02 名古屋店  03 札幌店  04 東京店)など この2つのファイルを使って以下のファイルを出力する方法を教えてください。 出力ファイル 店名 売り上げ (大阪店 100万円  大阪店 100万円  大阪店 100万円) 注意:出力ファイルには、一致するコードをすべて 出力するのではなく、01の大阪店のみをすべて出力したいです。 ●SERCHを使いたいです ~~~~~~~~~~~~~~~~~ SET IDX 1 SERCH □□□ AT END エラー処理 WHEN ○○○=△△△(IDX) これは、2つのファイルが一致するすべてを出力してしまいます。 求めたいのは、一部のコード(01)のときだけです。 どうすればいいですか? 前提として、トランザクションファイルをすべて読み込みます。 マスターファイルは、テーブルにすべて読み込みます。 ~~~~~~~~~~~~~ 自分の見解 SERCHをやってトランザクションファイルとマスターファイルとが一致するのを探して一致する場合、さらに01か判断するような感じになると思うんですが・・・ 実際に簡単にプログラムを書いていただけるとうれしいです。

  • Pascalでの選択ソート

    program sort(input, output); const numofdata =100 ; var d: array [1..numofdata] of integer; i,j,k: integer; tmp: integer; begin for i:=1 to numofdata do begin read(d[i]); end; for i:=1 to numofdata-1 do begin j:=i; for k:=i+1 to numofdata do begin if d[j]>d[k] then j:=k; end; tmp:=d[j]; d[j]:=d[i]; d[i]:=tmp; end; for i:=1 to numofdata do begin writeln(d[i]) end end. このプログラムを、データ数(1個から最大10000個まで)を最初に入力できるように変更するには、どうすればよいのでしょうか。教えてください。