Transcript RPG IV - Chapter 11 - Fox Valley Technical College
Advanced Data Definition
Chapter 11
Presentation © Copyright 2002, Bryan Meyers
Objectives
• Understand unique data types • Perform date arithmetic • Define, initialize, and use data structures
Programming in RPG IV Third Edition 2
Data Types
Data Class
Character Numeric Date Boolean DBCS Object Pointer
Data Type
Character Zoned decimal Packed decimal Signed integer Unsigned integer Binary Floating point Date Time Timestamp Indicator Graphic Unicode Object/class Pointer
Programming in RPG IV Third Edition
RPG Code
A S P I U B G C O * F D T Z N
3
Data Types and Time
• Three data types for dealing with time: – Date (D) – Time (T) – Timestamp (Z) • Date supports 8 distinct formats – Default is *ISO • Time supports 5 distinct formats • Several separators are supported
Programming in RPG IV Third Edition 4
Date Formats
DATFMT Representation Example
*ISO yyyy-mm-dd 9999-12-31 *USA mm/dd/yyyy 12/31/9999 *EUR *JIS *YMD *MDY *DMY *JUL
Programming in RPG IV Third Edition
dd.mm.yyyy
yyyy-mm-dd yy/mm/dd mm/dd/yy dd/mm/yy yy/ddd 31.12.9999
9999-12-31 99/12/31 12/3199 31/12/99 99/365
5
Duration Codes
• Represent a duration in time – *YEARS (*Y) – *MONTHS (*M) – *DAYS (*D) – *HOURS (*H) – *MINUTES (*MN) – *SECONDS (*S) – *MSECONDS (*MS)
Programming in RPG IV Third Edition 6
Duration Functions
• Convert a number to a duration – %YEARS – %MONTHS – %DAYS – %HOURS – %MINUTES – %SECONDS – %MSECONDS
Programming in RPG IV Third Edition 7
Date Arithmetic
• Can perform date arithmetic using date/time/timestamp data in an expression with duration functions
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 /FREE DueDate = BillDate + %DAYS(30); EndTime = StartTime + %MINUTES(Min); DueDate = DueDate + %YEARS(5); StartDate = EndDate - %MONTHS(5); StartDate = EndDate + %MONTHS(-5); BillDate = DueDate - %DAYS(30); DueDate = DueDate - %YEARS(5); /END-FREE Programming in RPG IV Third Edition 8
%DIFF Function
• Calculates the difference between dates/times/timestamps • Specify duration code as third argument • Result is numeric
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 /FREE Age = %DIFF(TodayDate:BirthDate:*YEARS); CramTime = %DIFF(ExamDate:TodayDate:*DAYS); /END-FREE Programming in RPG IV Third Edition 9
%SUBDT Function
• Extracts portion of a date/time/timestamp – Date “substring” • Specify portion with a duration code • Result is numeric
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 /FREE BirthYear = %SUBDT(BirthDate:*YEARS); LoanMonth = %SUBDT(LoanDate:*MONTHS); /END-FREE Programming in RPG IV Third Edition 10
Typed Literals
• Precede date/time literals with D or T – D’1899-12-31’ – T’08.00.00’ • Format of literal must match any format specified in H-spec DATFMT/TIMFMT keyword – Use *ISO format as default
Programming in RPG IV Third Edition 11
Pointer Data Types
• Two kinds of pointer data types – Basing pointers • Another field is BASED upon this pointer – Procedure pointers • Defined with PROCPTR keyword • Used to access storage that is allocated dynamically throughout the program • Pointers store address of memory locations rather than data values
Programming in RPG IV Third Edition 12
LIKE (Field Definition)
• LIKE keyword defines a field based on the attributes of another field – Used in D-specs • Field can be increased or decreased in length from the reference field
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++ D Gross S 9 2 D NetPay S LIKE(Gross) D FedTax S -2 LIKE(Gross) D TotalGross S +4 LIKE(Gross) Programming in RPG IV Third Edition 13
Data Structures
• Subdivide fields into subfields • Restructure records with different field layouts • Change field data types • Add a second dimension to arrays
Programming in RPG IV Third Edition 14
Defining Data Structures
• Subdivide fields into subfields • Change field data types • Data structure has two parts – Data structure header – Definition for the subfields • DS coded in 24-25 on D spec signals the beginning of a data structure • Enter name of data structure in 7-21
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 DName+++++++++++ETDsFrom+++To/Len+IDc.Keywords+++++++++++++++++++++++++++++ D OptName DS D SubfieldA 3 0 D SubfieldB 5 2 Programming in RPG IV Third Edition 15
OVERLAY
• OVERLAY keyword indicates that a subfield overlays the storage of another subfield • If the data item within parentheses is an array, OVERLAY applies to each element of the array
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 DName+++++++++++ETDsFrom+++To/Len+IDc.Keywords+++++++++++++++++++++++++++++ D DS D Phone 10 0 D AreaCode 3 0 OVERLAY(Phone) D Exchange 3 0 OVERLAY(Phone:4) D LocalNbr 4 0 OVERLAY(Phone:7) //Using OVERLAY with *NEXT D DS D BigArray 10 DIM(300) D SubArray 2 OVERLAY(BigArray) Programming in RPG IV Third Edition 16
Externally Described Data Structures
• Externally described data structures are useful when you want to standardize a data structure – Subfield are described as fields in a file record format – Not need to code them in RPG program • Code an E in position 22 • Name the external file using the EXTNAME keyword
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 DName+++++++++++ETDsFrom+++To/Len+IDc.Keywords+++++++++++++++++++++++++++++ D PgmSts E DS EXTNAME(RefPgmSts) Programming in RPG IV Third Edition 17
LIKEDS
• LIKEDS defines one data structure to be like another data structure – Identical subfields • Must qualify subfield name with data structure name
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 DName+++++++++++ETDsFrom+++To/Len+IDc.Keywords+++++++++++++++++++++++++++++ D Contact DS D Name 35 D State 2 D ZipCode 10 D Customer DS LIKEDS(Contact) D Vendor DS LIKEDS(Contact) /FREE Customer.Name = Vendor.Name; /END-FREE Programming in RPG IV Third Edition 18
Multiple Occurrence Data Structures
• Repeated data structures • Keyword OCCURS – Number determines how many times the structure is repeated in storage
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 DName+++++++++++ETDsFrom+++To/Len+IDc.Keywords+++++++++++++++++++++++++++++ D DSState DS OCCURS(50) D Code 2 D Name 15 D SalesTax 4 4 D Capital 15 D LowZip 5 0 D HiZip 5 0 Programming in RPG IV Third Edition 19
%OCCUR Function
• Set occurrence – %OCCUR function establishes which occurrence program uses next – Specify %OCCUR on left side of expression • Get active occurrence – %OCCUR retrieves active occurrence – Specify %OCCUR on right side of expression
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 /FREE FOR I = 1 to 50; %OCCUR(DSState) = I; READ StatesFile; ENDFOR; S = %OCCUR(DSState); /END-FREE Programming in RPG IV Third Edition 20
Variable Initialization
• INZ keyword will initialize to default value of data type – Definition specification • *INZSR subroutine – Invoked automatically at program start • CLEAR and RESET operations will reinitialize variables – CLEAR generally zeros or blanks fields – RESET reinitializes variables to INZ value
Programming in RPG IV Third Edition 21
File Information Data Structure
• Optional data structure for each file in your program • Contains predefined subfields – Information about the file and I/O operations • Requires an F-spec INFDS keyword to name data structure
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 FFilename++IPEASFRlen+LKlen+AIDevice+.Keywords+++++++++++++++++++++++++++++ DName+++++++++++ETDsFrom+++To/Len+IDc.Keywords+++++++++++++++++++++++++++++ FSample UF E K DISK INFDS(SampleDS) … D SampleDS DS D FileName *FILE D FileStatus *STATUS D OpCode *OPCODE D RelRecNbr 397 400B 0 D RecCnt 156 159B 0 Programming in RPG IV Third Edition 22
Program Status Data Structure
• Provides information about program and exceptions/errors that occur • ‘S’ in position 23 identifies a program status data structure
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 DName+++++++++++ETDsFrom+++To/Len+IDc.Keywords+++++++++++++++++++++++++++++ D PSDS SDS D PrgStatus *STATUS D ErrType 40 42 D ErrCode 43 46 D JobName 244 253 D JobNumber 264 269 D UserName 354 363 Programming in RPG IV Third Edition 23
Points to Remember
• Date/time/timestamp data types can manipulate date-related data with special functions • Fields can be defined relative to other field definitions using the keyword LIKE • You can define data structures that represent complex definitions of a given area of memory
Programming in RPG IV Third Edition 24
Points to Remember
• Data structures or subfields of data structures can be initialized easily as part of the data structure definition • Two special data structures of predefined subfields exist in RPG to provide information about the status of files used by the program or about the processing of the program itself
Programming in RPG IV Third Edition 25