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、プログラミングのランキングサイトはこちらです。
最新記事の自動受信登録はこちらです。 |
![]() |
![]() |
![]() |
![]() |
| 固定リンク







コメント