Skip to main content

ebcdic-overpunch-decoding

Reference for the EBCDIC "overpunch" / zoned-decimal sign convention where the units position of a numeric field is replaced with a letter that encodes both a digit and a sign. Useful when reading mainframe-style fixed-length tapes whose amount fields appear as digits followed by a letter (e.g. "0000000000123D" or "0000000000045M").

소스 정보

저장소
benchflow-ai/skillsbench
최근 소스 활동
2026년 6월 4일 04:15
감지된 SKILL.md 언어
영어
스타
1,837
포크
371

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
ebcdic-overpunch-decoding
description
Reference for the EBCDIC "overpunch" / zoned-decimal sign convention where the units position of a numeric field is replaced with a letter that encodes both a digit and a sign. Useful when reading mainframe-style fixed-length tapes whose amount fields appear as digits followed by a letter (e.g. "0000000000123D" or "0000000000045M").
# EBCDIC overpunch (zoned decimal sign) On classic mainframe tapes, signed numeric amounts are stored as N-1 digits followed by a single byte where the high-order bits carry the sign and the low-order bits carry the final decimal digit. When the file is converted to ASCII / printable form, the last byte is rendered as a letter (or a brace). ## Sign and digit table | Char | Sign | Last digit | | Char | Sign | Last digit | |------|------|------------|-------|------|------|------------| | `{` | + | 0 | | `}` | − | 0 | | `A` | + | 1 | | `J` | − | 1 | | `B` | + | 2 | | `K` | − | 2 | | `C` | + | 3 | | `L` | − | 3 | | `D` | + | 4 | | `M` | − | 4 | | `E` | + | 5 | | `N` | − | 5 | | `F` | + | 6 | | `O` | − | 6 | | `G` | + | 7 | | `P` | − | 7 | | `H` | + | 8 | | `Q` | − | 8 | | `I` | + | 9 | | `R` | − | 9 | Positive zero is `{`; negative zero is `}`. Both decode to magnitude 0 — keep the sign attached so downstream arithmetic doesn't drop a debit's polarity. ## A common defect The positive half of the table (`{`, `A`–`I`) is the visible-looking case and is often handled first. The negative half (`}`, `J`–`R`) looks like ordinary letters and is easy to forget. If only the positive letters are decoded, debits and credits both come through as positive — the totals look plausible but signs are wrong on every negative row. ## Decoding pattern (placeholder names) Split the field into the leading digits and the overpunch byte, look up the sign + units digit from the table above, recombine, then build the signed working-storage value. The shape below uses **generic** identifiers — substitute your own field names: ```cobol *> placeholders: digits-buf holds the recombined unsigned digits, *> op-char is the overpunch byte, sgn / lo-digit are scratch. split raw-amount into (leading-digits, op-char) EVALUATE op-char WHEN "{" sgn := "+" lo-digit := 0 *> positive zero WHEN "A" THRU "I" sgn := "+" lo-digit := 1..9 WHEN "}" sgn := "-" lo-digit := 0 *> negative zero WHEN "J" THRU "R" sgn := "-" lo-digit := 1..9 END-EVALUATE digits-buf := leading-digits with lo-digit appended signed-value := (sgn = "-") ? -digits-buf : +digits-buf ``` The decisive point is that the EVALUATE must cover **both** halves of the table — the negative letters `}` and `J`–`R` as well as the positive `{`/`A`–`I`. The exact PIC clauses and MOVE targets depend on your own record layout; what matters is that no overpunch character falls through undecoded. Some shops use COBOL's `SIGN IS TRAILING SEPARATE` / `SIGN IS TRAILING` clauses with native EBCDIC zoned data, but on ASCII-converted tapes the characters above are literally what you read — explicit lookup is the clearest decode. ## Verification tip Pick one positive and one negative row from the tape, decode by hand using the table, and reconcile against an expected total. If only the positive side works you will see plausible magnitudes but inverted aggregate signs. ## References - IBM Enterprise COBOL Language Reference — "Zoned decimal" / "USAGE DISPLAY" with `SIGN IS …` clauses. - IBM Knowledge Center: "Signed zoned decimal numbers" (overpunch table for positive `{ A B C D E F G H I` and negative `} J K L M N O P Q R`).
GitHub에서 보기