« IT用語中国語 | トップページ | COPY文 »

2007年5月26日 (土)

REDEFINES

 マルチレコードレイアウトを扱うときなどにREDEFINES句を使うと便利です。以下の例は2種類のレコードレイアウトを持つテキストファイルを読込んで項目を画面表示します。
ファイル内容(実行するには以下の6行をC:\TEST.TXTに書き込みます。)
R1=aaaaaaaaaA0005
R2=108-8558日本電気 株式会社           東京都 港区 芝浦 4丁目14-22大東田町ビル
R1=bbbbbbbbbB0005
R2=105-8001株式会社 東芝             東京都 港区 芝浦 1丁目1-1
R2=141-8514日本アイ・ビー・エム 株式会社     東京都 品川区 西五反田 8丁目1-5 
R1=cccccccccC0005

COBOL
ENVIRONMENT             DIVISION    .
CONFIGURATION           SECTION     .
INPUT-OUTPUT            SECTION.
FILE-CONTROL.
     SELECT  TF
         ASSIGN                   "C:\TEST.TXT"
         ORGANIZATION    LINE SEQUENTIAL
     .
DATA                    DIVISION.
FILE                    SECTION.
*****************************************************************
FD  TF      .
*****************************************************************
01  TF-R        .
     03  RKEY            PIC  X(003).
     03  ITEMS           PIC  X(600).
       01  R1 REDEFINES TF-R.
           03 RKEY             PIC  X(003).
           03 品名             PIC  X(010).
           03 数量             PIC  9(005).
       01 R2 REDEFINES TF-R.
           03 RKEY             PIC  X(003).
           03 郵便番号         PIC  X(008).
           03 会社名           PIC  N(020).
           03 住所             PIC  N(040).
       WORKING-STORAGE SECTION.
       01 I PIC 99.
       PROCEDURE DIVISION.
           OPEN INPUT TF.
           PERFORM UNTIL TF-R = HIGH-VALUE
             READ TF
               AT END
                   MOVE HIGH-VALUE TO TF-R
               NOT AT END
                 EVALUATE TRUE
                   WHEN RKEY OF TF-R = "R1="
                    DISPLAY "レコードレイアウトR1"
                    DISPLAY 品名
                    DISPLAY 数量
                   WHEN RKEY OF TF-R = "R2="
                    DISPLAY "レコードレイアウトR2"
                    DISPLAY 郵便番号
                    DISPLAY 会社名
                    DISPLAY 住所
                 END-EVALUATE
                 DISPLAY " "
           END-PERFORM.
           CLOSE TF.
           STOP RUN.

実行結果

レコードレイアウトR1
aaaaaaaaaA
0005

レコードレイアウトR2
108-8558
日本電気 株式会社           
東京都 港区 芝浦 4丁目14-22大東田町ビル

レコードレイアウトR1
bbbbbbbbbB
0005

レコードレイアウトR2
105-8001
株式会社 東芝             
東京都 港区 芝浦 1丁目1-1

レコードレイアウトR2
141-8514
日本アイ・ビー・エム 株式会社     
東京都 品川区 西五反田 8丁目1-5

レコードレイアウトR1
cccccccccC
0005

VB.NET
VB.NETにはREDEFINES句に該当する機能は有りません。Structureを使ってCOBOL的にマネて見ましょう。

Module Module1
    'レコードフォーマットR1
    Public Structure R1
        Public RKEY As String
        Public 品名 As String
        Public 数量 As String
        Public Sub Redefines(ByVal R0 As String)
            RKEY = Mid(R0, 1, 3)
            品名 = Mid(R0, 4, 10)
            数量 = Mid(R0, 14, 5)
        End Sub
    End Structure
    'レコードフォーマットR2
    Public Structure R2
        Dim RKEY As String
        Dim 郵便番号 As String
        Dim 会社名 As String
        Dim 住所 As String
        Public Sub Redefines(ByVal R0 As String)
            RKEY = Mid(R0, 1, 3)
            郵便番号 = Mid(R0, 4, 8)
            会社名 = Mid(R0, 12, 20)
            住所 = Mid(R0, 32, 40)
        End Sub
    End Structure
    Sub Main()
        Dim sf As New System.IO.StreamReader("c:\test.txt", _
        System.Text.Encoding.GetEncoding(932))  'Shift JISを指定
        Dim i As Integer = 0
        Dim R1 As New R1
        Dim R2 As New R2
        Do Until sf.EndOfStream
            Dim sr As String
            sr = sf.ReadLine()
            i += 1
            R1.Redefines(sr)
            R2.Redefines(sr)
            Select Case Mid(sr, 1, 3)
                Case "R1="
                    Console.WriteLine(i.ToString + "レコードフォーマット R1")
                    Console.WriteLine(R1.品名)
                    Console.WriteLine(R1.数量)
                Case "R2="
                    Console.WriteLine(i.ToString + "レコードフォーマット R2")
                    Console.WriteLine(R2.郵便番号)
                    Console.WriteLine(R2.会社名)
                    Console.WriteLine(R2.住所)
            End Select
            Console.WriteLine(ControlChars.CrLf)    '改行
        Loop
        sf.Close()
    End Sub
End Module
実行結果

1レコードフォーマット R1
aaaaaaaaaA
0005


2レコードフォーマット R2
108-8558
日本電気 株式会社           
東京都 港区 芝浦 4丁目14-22大東田町ビル


3レコードフォーマット R1
bbbbbbbbbB
0005


4レコードフォーマット R2
105-8001
株式会社 東芝             
東京都 港区 芝浦 1丁目1-1


5レコードフォーマット R2
141-8514
日本アイ・ビー・エム 株式会社     
東京都 品川区 西五反田 8丁目1-5


6レコードフォーマット R1
cccccccccC
0005

お役に立てましたか?
IT、プログラミングのランキングサイトはこちらです。

にほんブログ村 IT技術ブログへ 人気blogランキングへ FC2 Blog Rankingへ


最新記事の自動受信登録はこちらです。

はてなRSSに追加

livedoor Readerに追加
My Yahoo!に追加
Googleに追加
goo RSSリーダーに追加

|

« IT用語中国語 | トップページ | COPY文 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/279803/6129721

この記事へのトラックバック一覧です: REDEFINES:

« IT用語中国語 | トップページ | COPY文 »