The NUMERIC-EDITED class test represents comprehensive formatted numeric data validation and sophisticated editing character verification capabilities within COBOL programming environments, providing advanced validation mechanisms for edited numeric fields, enhanced formatting verification features, and intelligent editing character testing that enable precise formatted data validation, complex numeric display verification processes, and systematic edited numeric content analysis. This class test embodies modern formatting validation principles by supporting comprehensive edited numeric testing, enabling sophisticated formatted data integrity workflows, and facilitating precise validation control requirements while maintaining format accuracy, ensuring predictable editing behavior, and enabling flexible validation architectures across enterprise applications requiring exact formatted numeric verification, display validation capabilities, and reliable edited data validation throughout sophisticated business reporting scenarios and formatted data processing workflows.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384*> Basic NUMERIC-EDITED class tests 01 WS-EDITED-FIELDS. 05 WS-CURRENCY-AMOUNT PIC $$$,$$9.99. 05 WS-FORMATTED-TOTAL PIC ZZZ,ZZ9.99. 05 WS-PERCENTAGE-RATE PIC ZZ9.99%. 05 WS-REPORT-AMOUNT PIC ***,**9.99CR. *> Testing edited numeric data IF WS-CURRENCY-AMOUNT IS NUMERIC-EDITED DISPLAY "Currency amount is properly formatted" ELSE DISPLAY "Invalid currency format" END-IF *> NUMERIC-EDITED with NOT IF WS-FORMATTED-TOTAL IS NOT NUMERIC-EDITED DISPLAY "Total format validation failed" PERFORM FORMAT-ERROR-HANDLING END-IF *> NUMERIC-EDITED in compound conditions IF WS-CURRENCY-AMOUNT IS NUMERIC-EDITED AND WS-PERCENTAGE-RATE IS NUMERIC-EDITED PERFORM PROCESS-FINANCIAL-DATA ELSE DISPLAY "Format validation errors detected" END-IF *> Different editing patterns 01 WS-EDITING-EXAMPLES. 05 WS-AMOUNT-WITH-COMMAS PIC 9,999,999.99. 05 WS-AMOUNT-WITH-DOLLAR PIC $9,999.99. 05 WS-AMOUNT-WITH-SPACES PIC Z,ZZZ,ZZ9.99. 05 WS-AMOUNT-WITH-ASTERISK PIC *,***,**9.99. 05 WS-AMOUNT-WITH-PLUS PIC +9,999.99. 05 WS-AMOUNT-WITH-MINUS PIC -9,999.99. 05 WS-AMOUNT-WITH-CR PIC 9,999.99CR. 05 WS-AMOUNT-WITH-DB PIC 9,999.99DB. *> Testing various editing formats PERFORM VARYING WS-INDEX FROM 1 BY 1 UNTIL WS-INDEX > 8 EVALUATE WS-INDEX WHEN 1 IF WS-AMOUNT-WITH-COMMAS IS NUMERIC-EDITED DISPLAY "Comma formatting validated" END-IF WHEN 2 IF WS-AMOUNT-WITH-DOLLAR IS NUMERIC-EDITED DISPLAY "Dollar sign formatting validated" END-IF WHEN 3 IF WS-AMOUNT-WITH-SPACES IS NUMERIC-EDITED DISPLAY "Space suppression formatting validated" END-IF *> Continue for other formats... END-EVALUATE END-PERFORM *> User input validation for edited fields ACCEPT WS-CURRENCY-AMOUNT FROM CONSOLE IF WS-CURRENCY-AMOUNT IS NUMERIC-EDITED PERFORM VALIDATE-CURRENCY-RANGE ELSE DISPLAY "Please enter amount in format: $999.99" PERFORM GET-CURRENCY-INPUT END-IF *> Report field validation 01 WS-REPORT-FIELDS. 05 WS-REPORT-LINE OCCURS 50 TIMES. 10 WS-LINE-AMOUNT PIC $***,**9.99. 10 WS-LINE-PERCENTAGE PIC ZZ9.99%. PERFORM VARYING WS-LINE-NUMBER FROM 1 BY 1 UNTIL WS-LINE-NUMBER > 50 IF WS-LINE-AMOUNT(WS-LINE-NUMBER) IS NUMERIC-EDITED AND WS-LINE-PERCENTAGE(WS-LINE-NUMBER) IS NUMERIC-EDITED ADD 1 TO WS-VALID-LINES ELSE ADD 1 TO WS-INVALID-LINES PERFORM LOG-FORMAT-ERROR END-IF END-PERFORM
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104*> Currency symbol editing 01 WS-CURRENCY-FORMATS. 05 WS-DOLLAR-FIXED PIC $999.99. *> Fixed dollar sign 05 WS-DOLLAR-FLOATING PIC $$$9.99. *> Floating dollar sign 05 WS-POUND-STERLING PIC £999.99. *> Pound symbol 05 WS-EURO-AMOUNT PIC €999.99. *> Euro symbol *> Comma and decimal editing 01 WS-NUMERIC-FORMATS. 05 WS-LARGE-AMOUNT PIC 999,999,999.99. *> Fixed commas 05 WS-SUPPRESSED-COMMAS PIC Z,ZZZ,ZZ9.99. *> Suppressed commas 05 WS-DECIMAL-ONLY PIC 999.999. *> Decimal point only 05 WS-INTEGER-COMMAS PIC 999,999,999. *> Integer with commas *> Zero suppression editing 01 WS-SUPPRESSION-FORMATS. 05 WS-LEADING-ZEROS PIC ZZZZ9. *> Leading zero suppression 05 WS-SPACES-FOR-ZEROS PIC Z,ZZZ.99. *> Spaces for leading zeros 05 WS-ASTERISK-FILL PIC *,***.** *> Asterisk fill 05 WS-MIXED-SUPPRESSION PIC Z,**9.99 *> Mixed suppression *> Sign editing patterns 01 WS-SIGN-FORMATS. 05 WS-PLUS-SIGN PIC +999.99. *> Plus sign editing 05 WS-MINUS-SIGN PIC -999.99. *> Minus sign editing 05 WS-CREDIT-DEBIT PIC 999.99CR. *> Credit/Debit notation 05 WS-DEBIT-BALANCE PIC 999.99DB. *> Debit notation 05 WS-FLOATING-PLUS PIC +++9.99. *> Floating plus 05 WS-FLOATING-MINUS PIC ---9.99. *> Floating minus *> Special editing characters 01 WS-SPECIAL-FORMATS. 05 WS-PERCENTAGE PIC ZZ9.99%. *> Percentage symbol 05 WS-BLANK-WHEN-ZERO PIC BZZZ9. *> Blank when zero 05 WS-SLASH-EDITING PIC 99/99/9999. *> Date-like editing 05 WS-CUSTOM-LITERALS PIC X(5)"TOTAL"X(5). *> Literal insertion *> Validation examples for each format PERFORM VALIDATE-CURRENCY-FORMATS PERFORM VALIDATE-NUMERIC-FORMATS PERFORM VALIDATE-SUPPRESSION-FORMATS PERFORM VALIDATE-SIGN-FORMATS PERFORM VALIDATE-SPECIAL-FORMATS VALIDATE-CURRENCY-FORMATS. *> Test dollar formats MOVE "$123.45" TO WS-DOLLAR-FIXED IF WS-DOLLAR-FIXED IS NUMERIC-EDITED DISPLAY "✅ Fixed dollar format valid: " WS-DOLLAR-FIXED END-IF MOVE " $45.67" TO WS-DOLLAR-FLOATING IF WS-DOLLAR-FLOATING IS NUMERIC-EDITED DISPLAY "✅ Floating dollar format valid: " WS-DOLLAR-FLOATING END-IF *> Test other currency symbols MOVE "£789.01" TO WS-POUND-STERLING IF WS-POUND-STERLING IS NUMERIC-EDITED DISPLAY "✅ Pound sterling format valid: " WS-POUND-STERLING END-IF. VALIDATE-NUMERIC-FORMATS. *> Test comma formatting MOVE "1,234,567.89" TO WS-LARGE-AMOUNT IF WS-LARGE-AMOUNT IS NUMERIC-EDITED DISPLAY "✅ Large amount format valid: " WS-LARGE-AMOUNT END-IF MOVE " 1,234.56" TO WS-SUPPRESSED-COMMAS IF WS-SUPPRESSED-COMMAS IS NUMERIC-EDITED DISPLAY "✅ Suppressed comma format valid: " WS-SUPPRESSED-COMMAS END-IF. VALIDATE-SUPPRESSION-FORMATS. *> Test zero suppression MOVE " 45" TO WS-LEADING-ZEROS IF WS-LEADING-ZEROS IS NUMERIC-EDITED DISPLAY "✅ Zero suppression format valid: " WS-LEADING-ZEROS END-IF MOVE "**123.45" TO WS-ASTERISK-FILL IF WS-ASTERISK-FILL IS NUMERIC-EDITED DISPLAY "✅ Asterisk fill format valid: " WS-ASTERISK-FILL END-IF. VALIDATE-SIGN-FORMATS. *> Test sign editing MOVE "+123.45" TO WS-PLUS-SIGN IF WS-PLUS-SIGN IS NUMERIC-EDITED DISPLAY "✅ Plus sign format valid: " WS-PLUS-SIGN END-IF MOVE "123.45CR" TO WS-CREDIT-DEBIT IF WS-CREDIT-DEBIT IS NUMERIC-EDITED DISPLAY "✅ Credit notation format valid: " WS-CREDIT-DEBIT END-IF. VALIDATE-SPECIAL-FORMATS. *> Test special characters MOVE " 15.25%" TO WS-PERCENTAGE IF WS-PERCENTAGE IS NUMERIC-EDITED DISPLAY "✅ Percentage format valid: " WS-PERCENTAGE END-IF.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468IDENTIFICATION DIVISION. PROGRAM-ID. NUMERIC-EDITED-DEMO. DATA DIVISION. WORKING-STORAGE SECTION. *> Report formatting structures 01 WS-REPORT-FORMATTING. 05 WS-TITLE-LINE. 10 FILLER PIC X(20) VALUE SPACES. 10 WS-REPORT-TITLE PIC X(30) VALUE "FINANCIAL SUMMARY REPORT". 10 FILLER PIC X(20) VALUE SPACES. 05 WS-HEADER-LINE. 10 WS-ACCOUNT-HEADER PIC X(15) VALUE "ACCOUNT". 10 WS-BALANCE-HEADER PIC X(15) VALUE "BALANCE". 10 WS-PERCENT-HEADER PIC X(15) VALUE "CHANGE %". 10 WS-STATUS-HEADER PIC X(15) VALUE "STATUS". 05 WS-DETAIL-LINE. 10 WS-ACCOUNT-NUM PIC X(12). 10 FILLER PIC X(3) VALUE SPACES. 10 WS-BALANCE-AMT PIC $***,**9.99CR. 10 FILLER PIC X(2) VALUE SPACES. 10 WS-CHANGE-PCT PIC +ZZ9.99%. 10 FILLER PIC X(3) VALUE SPACES. 10 WS-ACCOUNT-STATUS PIC X(8). *> Financial calculation displays 01 WS-FINANCIAL-DISPLAYS. 05 WS-INVESTMENT-SUMMARY. 10 WS-PRINCIPAL-DISP PIC $Z,ZZZ,ZZ9.99. 10 WS-INTEREST-DISP PIC $Z,ZZZ,ZZ9.99. 10 WS-TOTAL-DISP PIC $Z,ZZZ,ZZ9.99. 10 WS-RATE-DISP PIC ZZ9.999%. 05 WS-BUDGET-ANALYSIS. 10 WS-BUDGET-ITEMS OCCURS 10 TIMES. 15 WS-CATEGORY PIC X(15). 15 WS-BUDGETED PIC $***,**9.99. 15 WS-ACTUAL PIC $***,**9.99. 15 WS-VARIANCE PIC +$**,**9.99-. 15 WS-PERCENT-VAR PIC +ZZZ.9%. *> Statistical displays 01 WS-STATISTICS-DISPLAY. 05 WS-EMPLOYEE-STATS OCCURS 25 TIMES. 10 WS-EMP-ID-DISP PIC X(8). 10 WS-SALARY-DISP PIC $ZZ,ZZ9.99. 10 WS-BONUS-DISP PIC $Z,ZZ9.99. 10 WS-COMMISSION-DISP PIC $Z,ZZ9.99. 10 WS-TOTAL-COMP-DISP PIC $ZZ,ZZ9.99. 10 WS-PERF-RATING PIC Z9.9%. *> Currency conversion displays 01 WS-CURRENCY-DISPLAYS. 05 WS-MULTI-CURRENCY OCCURS 5 TIMES. 10 WS-USD-AMOUNT PIC $ZZZ,ZZ9.99. 10 WS-EUR-AMOUNT PIC €ZZZ,ZZ9.99. 10 WS-GBP-AMOUNT PIC £ZZZ,ZZ9.99. 10 WS-JPY-AMOUNT PIC ¥Z,ZZZ,ZZ9. 10 WS-EXCHANGE-RATE PIC Z9.999999. *> Format validation arrays 01 WS-VALIDATION-DATA. 05 WS-TEST-FORMATS OCCURS 20 TIMES. 10 WS-FORMAT-NAME PIC X(20). 10 WS-TEST-VALUE PIC X(20). 10 WS-EXPECTED-RESULT PIC X. 10 WS-ACTUAL-RESULT PIC X. 05 WS-VALIDATION-SUMMARY. 10 WS-TOTAL-TESTS PIC 9(4) VALUE 0. 10 WS-PASSED-TESTS PIC 9(4) VALUE 0. 10 WS-FAILED-TESTS PIC 9(4) VALUE 0. 10 WS-SUCCESS-RATE PIC ZZ9.9%. *> Error tracking for format validation 01 WS-ERROR-TRACKING. 05 WS-FORMAT-ERRORS OCCURS 50 TIMES. 10 WS-ERROR-FORMAT PIC X(20). 10 WS-ERROR-VALUE PIC X(30). 10 WS-ERROR-REASON PIC X(50). 05 WS-ERROR-COUNT PIC 9(4) VALUE 0. PROCEDURE DIVISION. MAIN-NUMERIC-EDITED-DEMO. DISPLAY "=== COBOL NUMERIC-EDITED DEMONSTRATION ===" DISPLAY SPACES PERFORM SETUP-TEST-DATA PERFORM DEMONSTRATE-REPORT-FORMATTING PERFORM DEMONSTRATE-FINANCIAL-DISPLAYS PERFORM DEMONSTRATE-STATISTICAL-FORMATTING PERFORM DEMONSTRATE-CURRENCY-FORMATTING PERFORM DEMONSTRATE-FORMAT-VALIDATION PERFORM DEMONSTRATE-ERROR-DETECTION PERFORM DISPLAY-VALIDATION-SUMMARY DISPLAY "=== NUMERIC-EDITED DEMO COMPLETE ===" STOP RUN. SETUP-TEST-DATA. DISPLAY "=== SETTING UP NUMERIC-EDITED TEST DATA ===" *> Financial test data MOVE 125000.75 TO WS-PRINCIPAL-DISP MOVE 8756.25 TO WS-INTEREST-DISP MOVE 133757.00 TO WS-TOTAL-DISP MOVE 7.250 TO WS-RATE-DISP *> Budget test data MOVE "MARKETING" TO WS-CATEGORY(1) MOVE 50000.00 TO WS-BUDGETED(1) MOVE 47500.50 TO WS-ACTUAL(1) MOVE -2499.50 TO WS-VARIANCE(1) MOVE -5.0 TO WS-PERCENT-VAR(1) MOVE "OPERATIONS" TO WS-CATEGORY(2) MOVE 75000.00 TO WS-BUDGETED(2) MOVE 78250.25 TO WS-ACTUAL(2) MOVE 3250.25 TO WS-VARIANCE(2) MOVE 4.3 TO WS-PERCENT-VAR(2) *> Employee statistics MOVE "EMP12345" TO WS-EMP-ID-DISP(1) MOVE 85000.00 TO WS-SALARY-DISP(1) MOVE 5000.00 TO WS-BONUS-DISP(1) MOVE 2500.00 TO WS-COMMISSION-DISP(1) MOVE 92500.00 TO WS-TOTAL-COMP-DISP(1) MOVE 95.5 TO WS-PERF-RATING(1) *> Currency conversion data MOVE 10000.00 TO WS-USD-AMOUNT(1) MOVE 8500.00 TO WS-EUR-AMOUNT(1) MOVE 7200.00 TO WS-GBP-AMOUNT(1) MOVE 1100000 TO WS-JPY-AMOUNT(1) MOVE 1.18 TO WS-EXCHANGE-RATE(1) DISPLAY " ✓ Test data initialized for all format categories" DISPLAY SPACES. DEMONSTRATE-REPORT-FORMATTING. DISPLAY "=== REPORT FORMATTING VALIDATION ===" DISPLAY SPACES DISPLAY "Testing formatted report display fields..." *> Sample account data MOVE "ACC-001234" TO WS-ACCOUNT-NUM MOVE 125750.50 TO WS-BALANCE-AMT MOVE 12.75 TO WS-CHANGE-PCT MOVE "ACTIVE" TO WS-ACCOUNT-STATUS *> Validate formatted fields IF WS-BALANCE-AMT IS NUMERIC-EDITED DISPLAY " ✅ Balance amount formatting valid: " WS-BALANCE-AMT ELSE DISPLAY " ❌ Balance amount formatting invalid" END-IF IF WS-CHANGE-PCT IS NUMERIC-EDITED DISPLAY " ✅ Change percentage formatting valid: " WS-CHANGE-PCT ELSE DISPLAY " ❌ Change percentage formatting invalid" END-IF *> Test negative amounts MOVE -5000.00 TO WS-BALANCE-AMT IF WS-BALANCE-AMT IS NUMERIC-EDITED DISPLAY " ✅ Negative balance formatting valid: " WS-BALANCE-AMT END-IF *> Display complete formatted line DISPLAY " " DISPLAY " 📊 Formatted Report Line:" DISPLAY " " WS-DETAIL-LINE DISPLAY SPACES. DEMONSTRATE-FINANCIAL-DISPLAYS. DISPLAY "=== FINANCIAL DISPLAY FORMATTING ===" DISPLAY SPACES DISPLAY "Validating financial calculation displays..." *> Validate investment summary displays IF WS-PRINCIPAL-DISP IS NUMERIC-EDITED AND WS-INTEREST-DISP IS NUMERIC-EDITED AND WS-TOTAL-DISP IS NUMERIC-EDITED AND WS-RATE-DISP IS NUMERIC-EDITED DISPLAY " 💰 Investment Summary (All formats valid):" DISPLAY " Principal: " WS-PRINCIPAL-DISP DISPLAY " Interest: " WS-INTEREST-DISP DISPLAY " Total: " WS-TOTAL-DISP DISPLAY " Rate: " WS-RATE-DISP ELSE DISPLAY " ❌ Investment summary format validation failed" END-IF *> Budget analysis validation DISPLAY " " DISPLAY " 📈 Budget Analysis Formatting:" PERFORM VARYING WS-ERROR-COUNT FROM 1 BY 1 UNTIL WS-ERROR-COUNT > 2 IF WS-BUDGETED(WS-ERROR-COUNT) IS NUMERIC-EDITED AND WS-ACTUAL(WS-ERROR-COUNT) IS NUMERIC-EDITED AND WS-VARIANCE(WS-ERROR-COUNT) IS NUMERIC-EDITED AND WS-PERCENT-VAR(WS-ERROR-COUNT) IS NUMERIC-EDITED DISPLAY " " WS-CATEGORY(WS-ERROR-COUNT) ":" DISPLAY " Budgeted: " WS-BUDGETED(WS-ERROR-COUNT) DISPLAY " Actual: " WS-ACTUAL(WS-ERROR-COUNT) DISPLAY " Variance: " WS-VARIANCE(WS-ERROR-COUNT) DISPLAY " Percent: " WS-PERCENT-VAR(WS-ERROR-COUNT) ELSE DISPLAY " ❌ Format error in " WS-CATEGORY(WS-ERROR-COUNT) END-IF END-PERFORM DISPLAY SPACES. DEMONSTRATE-STATISTICAL-FORMATTING. DISPLAY "=== STATISTICAL DISPLAY FORMATTING ===" DISPLAY SPACES DISPLAY "Validating employee statistics formatting..." *> Test employee compensation formatting IF WS-SALARY-DISP(1) IS NUMERIC-EDITED AND WS-BONUS-DISP(1) IS NUMERIC-EDITED AND WS-COMMISSION-DISP(1) IS NUMERIC-EDITED AND WS-TOTAL-COMP-DISP(1) IS NUMERIC-EDITED AND WS-PERF-RATING(1) IS NUMERIC-EDITED DISPLAY " 👤 Employee Compensation (All formats valid):" DISPLAY " Employee ID: " WS-EMP-ID-DISP(1) DISPLAY " Base Salary: " WS-SALARY-DISP(1) DISPLAY " Bonus: " WS-BONUS-DISP(1) DISPLAY " Commission: " WS-COMMISSION-DISP(1) DISPLAY " Total Comp: " WS-TOTAL-COMP-DISP(1) DISPLAY " Performance: " WS-PERF-RATING(1) ELSE DISPLAY " ❌ Employee statistics format validation failed" END-IF *> Test zero suppression in statistics MOVE 0 TO WS-BONUS-DISP(1) MOVE 0 TO WS-COMMISSION-DISP(1) DISPLAY " " DISPLAY " 📊 Zero Suppression Test:" DISPLAY " Bonus (zero): " WS-BONUS-DISP(1) DISPLAY " Commission (zero): " WS-COMMISSION-DISP(1) IF WS-BONUS-DISP(1) IS NUMERIC-EDITED DISPLAY " ✅ Zero bonus formatting valid" END-IF DISPLAY SPACES. DEMONSTRATE-CURRENCY-FORMATTING. DISPLAY "=== MULTI-CURRENCY FORMATTING ===" DISPLAY SPACES DISPLAY "Validating international currency displays..." *> Test multi-currency formatting IF WS-USD-AMOUNT(1) IS NUMERIC-EDITED AND WS-EUR-AMOUNT(1) IS NUMERIC-EDITED AND WS-GBP-AMOUNT(1) IS NUMERIC-EDITED AND WS-JPY-AMOUNT(1) IS NUMERIC-EDITED AND WS-EXCHANGE-RATE(1) IS NUMERIC-EDITED DISPLAY " 💱 Multi-Currency Display (All formats valid):" DISPLAY " USD: " WS-USD-AMOUNT(1) DISPLAY " EUR: " WS-EUR-AMOUNT(1) DISPLAY " GBP: " WS-GBP-AMOUNT(1) DISPLAY " JPY: " WS-JPY-AMOUNT(1) DISPLAY " Rate: " WS-EXCHANGE-RATE(1) ELSE DISPLAY " ❌ Multi-currency format validation failed" END-IF *> Test different currency amounts MOVE 999999.99 TO WS-USD-AMOUNT(2) MOVE 0.01 TO WS-EUR-AMOUNT(2) MOVE 1000000 TO WS-GBP-AMOUNT(2) DISPLAY " " DISPLAY " 💰 Extreme Values Test:" IF WS-USD-AMOUNT(2) IS NUMERIC-EDITED DISPLAY " Max USD: " WS-USD-AMOUNT(2) END-IF IF WS-EUR-AMOUNT(2) IS NUMERIC-EDITED DISPLAY " Min EUR: " WS-EUR-AMOUNT(2) END-IF IF WS-GBP-AMOUNT(2) IS NUMERIC-EDITED DISPLAY " Large GBP: " WS-GBP-AMOUNT(2) END-IF DISPLAY SPACES. DEMONSTRATE-FORMAT-VALIDATION. DISPLAY "=== COMPREHENSIVE FORMAT VALIDATION ===" DISPLAY SPACES DISPLAY "Testing various NUMERIC-EDITED format patterns..." *> Setup format validation test cases MOVE 1 TO WS-TOTAL-TESTS PERFORM SETUP-FORMAT-TEST-CASES *> Run validation tests PERFORM VARYING WS-ERROR-COUNT FROM 1 BY 1 UNTIL WS-ERROR-COUNT > WS-TOTAL-TESTS PERFORM VALIDATE-FORMAT-PATTERN END-PERFORM *> Calculate success rate COMPUTE WS-SUCCESS-RATE = (WS-PASSED-TESTS / WS-TOTAL-TESTS) * 100 DISPLAY " " DISPLAY " 📊 Format Validation Results:" DISPLAY " Total Tests: " WS-TOTAL-TESTS DISPLAY " Passed: " WS-PASSED-TESTS DISPLAY " Failed: " WS-FAILED-TESTS DISPLAY " Success Rate: " WS-SUCCESS-RATE DISPLAY SPACES. SETUP-FORMAT-TEST-CASES. *> Currency format tests MOVE "DOLLAR-FIXED" TO WS-FORMAT-NAME(1) MOVE "$123.45" TO WS-TEST-VALUE(1) MOVE "P" TO WS-EXPECTED-RESULT(1) ADD 1 TO WS-TOTAL-TESTS MOVE "DOLLAR-FLOATING" TO WS-FORMAT-NAME(2) MOVE " $67.89" TO WS-TEST-VALUE(2) MOVE "P" TO WS-EXPECTED-RESULT(2) ADD 1 TO WS-TOTAL-TESTS MOVE "COMMA-FORMAT" TO WS-FORMAT-NAME(3) MOVE "1,234.56" TO WS-TEST-VALUE(3) MOVE "P" TO WS-EXPECTED-RESULT(3) ADD 1 TO WS-TOTAL-TESTS MOVE "PERCENTAGE" TO WS-FORMAT-NAME(4) MOVE " 25.5%" TO WS-TEST-VALUE(4) MOVE "P" TO WS-EXPECTED-RESULT(4) ADD 1 TO WS-TOTAL-TESTS MOVE "CREDIT-NOTATION" TO WS-FORMAT-NAME(5) MOVE "123.45CR" TO WS-TEST-VALUE(5) MOVE "P" TO WS-EXPECTED-RESULT(5) ADD 1 TO WS-TOTAL-TESTS *> Invalid format tests MOVE "INVALID-CURRENCY" TO WS-FORMAT-NAME(6) MOVE "$$123.45" TO WS-TEST-VALUE(6) MOVE "F" TO WS-EXPECTED-RESULT(6) ADD 1 TO WS-TOTAL-TESTS MOVE "INVALID-DECIMAL" TO WS-FORMAT-NAME(7) MOVE "123.45.67" TO WS-TEST-VALUE(7) MOVE "F" TO WS-EXPECTED-RESULT(7) ADD 1 TO WS-TOTAL-TESTS SUBTRACT 1 FROM WS-TOTAL-TESTS. VALIDATE-FORMAT-PATTERN. *> Test the format pattern (simplified for demo) IF WS-TEST-VALUE(WS-ERROR-COUNT) CONTAINS "$" OR WS-TEST-VALUE(WS-ERROR-COUNT) CONTAINS "%" OR WS-TEST-VALUE(WS-ERROR-COUNT) CONTAINS "CR" OR WS-TEST-VALUE(WS-ERROR-COUNT) CONTAINS "," MOVE "P" TO WS-ACTUAL-RESULT(WS-ERROR-COUNT) ELSE MOVE "F" TO WS-ACTUAL-RESULT(WS-ERROR-COUNT) END-IF *> Compare results IF WS-ACTUAL-RESULT(WS-ERROR-COUNT) = WS-EXPECTED-RESULT(WS-ERROR-COUNT) ADD 1 TO WS-PASSED-TESTS DISPLAY " ✅ " WS-FORMAT-NAME(WS-ERROR-COUNT) ": '" WS-TEST-VALUE(WS-ERROR-COUNT) "'" ELSE ADD 1 TO WS-FAILED-TESTS DISPLAY " ❌ " WS-FORMAT-NAME(WS-ERROR-COUNT) ": '" WS-TEST-VALUE(WS-ERROR-COUNT) "'" END-IF. DEMONSTRATE-ERROR-DETECTION. DISPLAY "=== ERROR DETECTION AND HANDLING ===" DISPLAY SPACES DISPLAY "Testing format error detection capabilities..." MOVE 0 TO WS-ERROR-COUNT *> Test various error conditions PERFORM LOG-FORMAT-ERROR WITH "CURRENCY" "ABC$123.45" "Invalid characters before currency symbol" PERFORM LOG-FORMAT-ERROR WITH "DECIMAL" "123..45" "Multiple decimal points" PERFORM LOG-FORMAT-ERROR WITH "COMMA" "1,23,4.56" "Improper comma placement" PERFORM LOG-FORMAT-ERROR WITH "PERCENTAGE" "123.45%%" "Multiple percentage symbols" PERFORM LOG-FORMAT-ERROR WITH "SIGN" "+-123.45" "Multiple sign characters" *> Display error log DISPLAY " 📋 Format Error Log:" PERFORM VARYING WS-TOTAL-TESTS FROM 1 BY 1 UNTIL WS-TOTAL-TESTS > WS-ERROR-COUNT DISPLAY " " WS-TOTAL-TESTS ": " WS-ERROR-FORMAT(WS-TOTAL-TESTS) DISPLAY " Value: '" WS-ERROR-VALUE(WS-TOTAL-TESTS) "'" DISPLAY " Reason: " WS-ERROR-REASON(WS-TOTAL-TESTS) END-PERFORM DISPLAY SPACES. LOG-FORMAT-ERROR. USING ERROR-TYPE ERROR-VALUE ERROR-REASON. ADD 1 TO WS-ERROR-COUNT MOVE ERROR-TYPE TO WS-ERROR-FORMAT(WS-ERROR-COUNT) MOVE ERROR-VALUE TO WS-ERROR-VALUE(WS-ERROR-COUNT) MOVE ERROR-REASON TO WS-ERROR-REASON(WS-ERROR-COUNT). DISPLAY-VALIDATION-SUMMARY. DISPLAY "=== NUMERIC-EDITED VALIDATION SUMMARY ===" DISPLAY SPACES DISPLAY "Comprehensive validation testing completed:" DISPLAY " 🎯 Validation Categories Tested:" DISPLAY " ✓ Report formatting displays" DISPLAY " ✓ Financial calculation displays" DISPLAY " ✓ Statistical formatting" DISPLAY " ✓ Multi-currency displays" DISPLAY " ✓ Format pattern validation" DISPLAY " ✓ Error detection and logging" DISPLAY " " DISPLAY " 📊 Overall Results:" DISPLAY " Format validation tests: " WS-TOTAL-TESTS DISPLAY " Successful validations: " WS-PASSED-TESTS DISPLAY " Failed validations: " WS-FAILED-TESTS DISPLAY " Format errors logged: " WS-ERROR-COUNT DISPLAY " Success rate: " WS-SUCCESS-RATE DISPLAY " " DISPLAY " 💡 Key Features Demonstrated:" DISPLAY " ✓ Currency symbol formatting ($, €, £, ¥)" DISPLAY " ✓ Comma insertion and suppression" DISPLAY " ✓ Zero suppression (Z) and asterisk fill (*)" DISPLAY " ✓ Sign editing (+, -, CR, DB)" DISPLAY " ✓ Percentage formatting (%)" DISPLAY " ✓ Decimal point handling" DISPLAY " ✓ Format validation and error detection" DISPLAY SPACES.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979801 FINANCIAL-STATEMENT. 05 STATEMENT-HEADER. 10 COMPANY-NAME PIC X(40). 10 REPORT-DATE PIC 99/99/9999. 10 REPORT-TIME PIC 99:99:99. 05 INCOME-STATEMENT. 10 REVENUE-LINE. 15 REVENUE-LABEL PIC X(20) VALUE "TOTAL REVENUE". 15 REVENUE-AMOUNT PIC $ZZZ,ZZZ,ZZ9.99. 10 EXPENSE-LINE. 15 EXPENSE-LABEL PIC X(20) VALUE "TOTAL EXPENSES". 15 EXPENSE-AMOUNT PIC $ZZZ,ZZZ,ZZ9.99. 10 PROFIT-LINE. 15 PROFIT-LABEL PIC X(20) VALUE "NET PROFIT". 15 PROFIT-AMOUNT PIC $ZZZ,ZZZ,ZZ9.99CR. 10 MARGIN-LINE. 15 MARGIN-LABEL PIC X(20) VALUE "PROFIT MARGIN". 15 MARGIN-PERCENT PIC ZZZ.99%. 01 VALIDATION-FLAGS. 05 ALL-FORMATS-VALID PIC X VALUE 'Y'. 05 FORMAT-ERROR-COUNT PIC 9(2) VALUE 0. PROCEDURE DIVISION. GENERATE-FINANCIAL-STATEMENT. *> Initialize sample data MOVE "ACME CORPORATION" TO COMPANY-NAME MOVE FUNCTION CURRENT-DATE(1:8) TO REPORT-DATE MOVE FUNCTION CURRENT-DATE(9:6) TO REPORT-TIME MOVE 1250000.75 TO REVENUE-AMOUNT MOVE 875000.50 TO EXPENSE-AMOUNT MOVE 375000.25 TO PROFIT-AMOUNT MOVE 30.00 TO MARGIN-PERCENT *> Validate all formatted fields PERFORM VALIDATE-FINANCIAL-FORMATS IF ALL-FORMATS-VALID = 'Y' PERFORM DISPLAY-FINANCIAL-STATEMENT ELSE DISPLAY "Format validation failed with " FORMAT-ERROR-COUNT " errors" PERFORM DISPLAY-FORMAT-ERRORS END-IF. VALIDATE-FINANCIAL-FORMATS. MOVE 'Y' TO ALL-FORMATS-VALID MOVE 0 TO FORMAT-ERROR-COUNT *> Validate revenue formatting IF REVENUE-AMOUNT IS NUMERIC-EDITED DISPLAY "✅ Revenue amount format valid: " REVENUE-AMOUNT ELSE MOVE 'N' TO ALL-FORMATS-VALID ADD 1 TO FORMAT-ERROR-COUNT DISPLAY "❌ Revenue amount format invalid" END-IF *> Validate expense formatting IF EXPENSE-AMOUNT IS NUMERIC-EDITED DISPLAY "✅ Expense amount format valid: " EXPENSE-AMOUNT ELSE MOVE 'N' TO ALL-FORMATS-VALID ADD 1 TO FORMAT-ERROR-COUNT DISPLAY "❌ Expense amount format invalid" END-IF *> Validate profit formatting (with CR notation) IF PROFIT-AMOUNT IS NUMERIC-EDITED DISPLAY "✅ Profit amount format valid: " PROFIT-AMOUNT ELSE MOVE 'N' TO ALL-FORMATS-VALID ADD 1 TO FORMAT-ERROR-COUNT DISPLAY "❌ Profit amount format invalid" END-IF *> Validate margin percentage IF MARGIN-PERCENT IS NUMERIC-EDITED DISPLAY "✅ Profit margin format valid: " MARGIN-PERCENT ELSE MOVE 'N' TO ALL-FORMATS-VALID ADD 1 TO FORMAT-ERROR-COUNT DISPLAY "❌ Profit margin format invalid" END-IF. DISPLAY-FINANCIAL-STATEMENT. DISPLAY " " DISPLAY "📊 FINANCIAL STATEMENT" DISPLAY "==================================" DISPLAY COMPANY-NAME " - " REPORT-DATE DISPLAY " " DISPLAY REVENUE-LINE DISPLAY EXPENSE-LINE DISPLAY "--------------------------------" DISPLAY PROFIT-LINE DISPLAY MARGIN-LINE DISPLAY "==================================".
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810901 CURRENCY-CONVERSION-DISPLAY. 05 CONVERSION-HEADER. 10 FILLER PIC X(10) VALUE "CURRENCY". 10 FILLER PIC X(12) VALUE "AMOUNT". 10 FILLER PIC X(12) VALUE "RATE". 10 FILLER PIC X(15) VALUE "USD EQUIVALENT". 05 CURRENCY-LINES OCCURS 5 TIMES. 10 CURRENCY-CODE PIC X(3). 10 FILLER PIC X(7) VALUE SPACES. 10 LOCAL-AMOUNT PIC ZZZ,ZZ9.99. 10 FILLER PIC X(1) VALUE SPACES. 10 EXCHANGE-RATE PIC Z9.999999. 10 FILLER PIC X(1) VALUE SPACES. 10 USD-EQUIVALENT PIC $ZZZ,ZZ9.99. 01 CURRENCY-SYMBOLS. 05 SYMBOL-LINES OCCURS 5 TIMES. 10 CURRENCY-NAME PIC X(8). 10 SYMBOL-AMOUNT PIC X(15). *> Different currency format definitions 01 FORMATTED-AMOUNTS. 05 EUR-AMOUNT PIC €ZZZ,ZZ9.99. 05 GBP-AMOUNT PIC £ZZZ,ZZ9.99. 05 JPY-AMOUNT PIC ¥Z,ZZZ,ZZ9. 05 CHF-AMOUNT PIC ZZZ,ZZ9.99"CHF". 05 CAD-AMOUNT PIC ZZZ,ZZ9.99"CAD". PROCEDURE DIVISION. PROCESS-CURRENCY-DISPLAY. PERFORM SETUP-CURRENCY-DATA PERFORM VALIDATE-CURRENCY-FORMATS PERFORM DISPLAY-CONVERSION-TABLE. SETUP-CURRENCY-DATA. *> Setup base conversion data MOVE "EUR" TO CURRENCY-CODE(1) MOVE 8500.00 TO LOCAL-AMOUNT(1) MOVE 1.180000 TO EXCHANGE-RATE(1) MOVE 10030.00 TO USD-EQUIVALENT(1) MOVE "GBP" TO CURRENCY-CODE(2) MOVE 7200.00 TO LOCAL-AMOUNT(2) MOVE 1.380000 TO EXCHANGE-RATE(2) MOVE 9936.00 TO USD-EQUIVALENT(2) MOVE "JPY" TO CURRENCY-CODE(3) MOVE 1100000 TO LOCAL-AMOUNT(3) MOVE 0.009000 TO EXCHANGE-RATE(3) MOVE 9900.00 TO USD-EQUIVALENT(3) *> Setup symbol-specific amounts MOVE "EUR" TO CURRENCY-NAME(1) MOVE 8500.00 TO EUR-AMOUNT MOVE EUR-AMOUNT TO SYMBOL-AMOUNT(1) MOVE "GBP" TO CURRENCY-NAME(2) MOVE 7200.00 TO GBP-AMOUNT MOVE GBP-AMOUNT TO SYMBOL-AMOUNT(2) MOVE "JPY" TO CURRENCY-NAME(3) MOVE 1100000 TO JPY-AMOUNT MOVE JPY-AMOUNT TO SYMBOL-AMOUNT(3). VALIDATE-CURRENCY-FORMATS. DISPLAY "Validating currency format displays..." *> Validate standard conversion table formats PERFORM VARYING WS-INDEX FROM 1 BY 1 UNTIL WS-INDEX > 3 IF LOCAL-AMOUNT(WS-INDEX) IS NUMERIC-EDITED AND EXCHANGE-RATE(WS-INDEX) IS NUMERIC-EDITED AND USD-EQUIVALENT(WS-INDEX) IS NUMERIC-EDITED DISPLAY "✅ " CURRENCY-CODE(WS-INDEX) " conversion formats valid" ELSE DISPLAY "❌ " CURRENCY-CODE(WS-INDEX) " conversion format error" END-IF END-PERFORM *> Validate currency symbol formats IF EUR-AMOUNT IS NUMERIC-EDITED DISPLAY "✅ Euro symbol format valid: " EUR-AMOUNT END-IF IF GBP-AMOUNT IS NUMERIC-EDITED DISPLAY "✅ Pound symbol format valid: " GBP-AMOUNT END-IF IF JPY-AMOUNT IS NUMERIC-EDITED DISPLAY "✅ Yen symbol format valid: " JPY-AMOUNT END-IF. DISPLAY-CONVERSION-TABLE. DISPLAY " " DISPLAY "💱 CURRENCY CONVERSION TABLE" DISPLAY "============================================" DISPLAY CONVERSION-HEADER DISPLAY "--------------------------------------------" PERFORM VARYING WS-INDEX FROM 1 BY 1 UNTIL WS-INDEX > 3 DISPLAY CURRENCY-LINES(WS-INDEX) END-PERFORM DISPLAY " " DISPLAY "💰 CURRENCY SYMBOL DISPLAYS" DISPLAY "============================================" PERFORM VARYING WS-INDEX FROM 1 BY 1 UNTIL WS-INDEX > 3 DISPLAY CURRENCY-NAME(WS-INDEX) ": " SYMBOL-AMOUNT(WS-INDEX) END-PERFORM.
What is the main purpose of the NUMERIC-EDITED class test?
Answer: NUMERIC-EDITED tests if a data item contains valid edited numeric data with formatting characters like currency symbols, commas, decimal points, and other editing characters as defined in the PICTURE clause.
What types of editing characters are recognized by NUMERIC-EDITED?
Answer: NUMERIC-EDITED recognizes currency symbols ($, €, £), commas (,), decimal points (.), sign characters (+, -, CR, DB), zero suppression (Z), asterisk fill (*), percentage symbols (%), and other formatting characters defined in numeric-edited PICTURE clauses.
When would you use NUMERIC-EDITED in business applications?
Answer: Use NUMERIC-EDITED for validating formatted financial reports, currency displays, statistical presentations, check amounts with asterisk fill, percentage displays, and any business documents requiring formatted numeric data with editing characters.