<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel>
  <title>COBOL Textbook</title>
  <link>https://coboltextbook.com/</link>
  <description>COBOL tutorials, one complete program per lesson, desk-checked against GnuCOBOL and the ISO standard, from your first program to files, tables, and JSON.</description>
  <lastBuildDate>2026-10-30T00:00:00Z</lastBuildDate>
  <item>
    <title>GnuCOBOL -std=ibm and other dialects: what each one changes</title>
    <link>https://coboltextbook.com/posts/gnucobol-std-dialects-ibm.html</link>
    <guid>https://coboltextbook.com/posts/gnucobol-std-dialects-ibm.html</guid>
    <description>What cobc -std=ibm actually switches in GnuCOBOL 3.2, read from its dialect files, and one program whose output changes when the dialect does.</description>
    <pubDate>2026-10-28T00:00:00Z</pubDate>
  </item>
  <item>
    <title>COBOL INSPECT REPLACING and CONVERTING, BEFORE and AFTER</title>
    <link>https://coboltextbook.com/posts/cobol-inspect-replacing-converting.html</link>
    <guid>https://coboltextbook.com/posts/cobol-inspect-replacing-converting.html</guid>
    <description>A GnuCOBOL program that cleans an order export in place with INSPECT REPLACING, CONVERTING and BEFORE/AFTER, and the size and order rules behind them.</description>
    <pubDate>2026-10-15T00:00:00Z</pubDate>
  </item>
  <item>
    <title>COBOL STRING and UNSTRING: splitting a CSV line into fields</title>
    <link>https://coboltextbook.com/posts/cobol-string-unstring.html</link>
    <guid>https://coboltextbook.com/posts/cobol-string-unstring.html</guid>
    <description>A GnuCOBOL program that splits a comma-separated export with UNSTRING, checks each field with COUNT IN and TALLYING IN, and builds a label with STRING.</description>
    <pubDate>2026-10-12T00:00:00Z</pubDate>
  </item>
  <item>
    <title>COBOL input validation: class tests, INSPECT and TEST-NUMVAL</title>
    <link>https://coboltextbook.com/posts/cobol-input-validation-class-inspect-test-numval.html</link>
    <guid>https://coboltextbook.com/posts/cobol-input-validation-class-inspect-test-numval.html</guid>
    <description>A GnuCOBOL edit program that checks every field of a fixed-width feed with CLASS, INSPECT, TEST-NUMVAL and TEST-DATE-YYYYMMDD, and logs every error with a code.</description>
    <pubDate>2026-10-08T00:00:00Z</pubDate>
  </item>
  <item>
    <title>COBOL JSON GENERATE and JSON PARSE: what GnuCOBOL 3.2 can do</title>
    <link>https://coboltextbook.com/posts/cobol-json-generate-parse.html</link>
    <guid>https://coboltextbook.com/posts/cobol-json-generate-parse.html</guid>
    <description>A GnuCOBOL program that turns fixed-width records into JSON Lines with JSON GENERATE, the exact output it should write, and why JSON PARSE does nothing in 3.2.</description>
    <pubDate>2026-10-05T00:00:00Z</pubDate>
  </item>
  <item>
    <title>Reconciling two files in COBOL: matched, left-only, right-only</title>
    <link>https://coboltextbook.com/posts/cobol-reconcile-two-files.html</link>
    <guid>https://coboltextbook.com/posts/cobol-reconcile-two-files.html</guid>
    <description>A complete GnuCOBOL match of two sorted files that reports every reference as matched, amount differs, bank only or book only, with control totals that must balance.</description>
    <pubDate>2026-09-24T00:00:00Z</pubDate>
  </item>
  <item>
    <title>Calling a C function from COBOL, and being called back</title>
    <link>https://coboltextbook.com/posts/cobol-call-c-function.html</link>
    <guid>https://coboltextbook.com/posts/cobol-call-c-function.html</guid>
    <description>CALL BY VALUE, BY REFERENCE and RETURNING across the C ABI, then the other direction with cob_init and cob_resolve, with both listings and the build lines.</description>
    <pubDate>2026-09-21T00:00:00Z</pubDate>
  </item>
  <item>
    <title>Free-format COBOL in GnuCOBOL: what changed from columns 8 and 12</title>
    <link>https://coboltextbook.com/posts/cobol-free-format-columns-8-and-12.html</link>
    <guid>https://coboltextbook.com/posts/cobol-free-format-columns-8-and-12.html</guid>
    <description>The same COBOL program written twice, in fixed format and in free format, with the column rules that shaped it and where GnuCOBOL and IBM disagree.</description>
    <pubDate>2026-09-17T00:00:00Z</pubDate>
  </item>
  <item>
    <title>COBOL copybooks: COPY, REPLACING, and one layout in three programs</title>
    <link>https://coboltextbook.com/posts/cobol-copybook-copy-replacing.html</link>
    <guid>https://coboltextbook.com/posts/cobol-copybook-copy-replacing.html</guid>
    <description>One 39-byte copybook in three GnuCOBOL programs: plain COPY, REPLACING LEADING, and REPLACE, with where GnuCOBOL and IBM differ on search paths and nesting.</description>
    <pubDate>2026-09-14T00:00:00Z</pubDate>
  </item>
  <item>
    <title>COBOL indexed files: ORGANIZATION INDEXED, START, READ KEY, REWRITE</title>
    <link>https://coboltextbook.com/posts/cobol-indexed-file-start-read-key-rewrite.html</link>
    <guid>https://coboltextbook.com/posts/cobol-indexed-file-start-read-key-rewrite.html</guid>
    <description>A GnuCOBOL program loads a parts master into an indexed file, reads by key, rewrites a record, browses a key range with START and READ NEXT, and deletes; data ships.</description>
    <pubDate>2026-09-10T00:00:00Z</pubDate>
  </item>
  <item>
    <title>COBOL WRITE a report file: headers, detail lines, page breaks</title>
    <link>https://coboltextbook.com/posts/cobol-write-report-file-page-breaks.html</link>
    <guid>https://coboltextbook.com/posts/cobol-write-report-file-page-breaks.html</guid>
    <description>A GnuCOBOL program writes a paginated report: page header with the run date, column headings, edited detail lines, a page total, and a break every 23 lines.</description>
    <pubDate>2026-09-07T00:00:00Z</pubDate>
  </item>
  <item>
    <title>Generating fixed-width test data with Python and reading it in COBOL</title>
    <link>https://coboltextbook.com/posts/python-fixed-width-test-data-cobol.html</link>
    <guid>https://coboltextbook.com/posts/python-fixed-width-test-data-cobol.html</guid>
    <description>A Python script writes a 64-byte fixed-width transaction file, a copybook pins the layout, and a GnuCOBOL program reads it back and prints control totals.</description>
    <pubDate>2026-09-05T00:00:00Z</pubDate>
  </item>
  <item>
    <title>COBOL REDEFINES example: one memory area, two views of a date</title>
    <link>https://coboltextbook.com/posts/cobol-redefines-example.html</link>
    <guid>https://coboltextbook.com/posts/cobol-redefines-example.html</guid>
    <description>REDEFINES overlays a second description on the same bytes: a date as text and as three numbers, record variants switched by type code, and a NUMERIC test first.</description>
    <pubDate>2026-09-05T00:00:00Z</pubDate>
  </item>
  <item>
    <title>COBOL sequential files: read a fixed-width file to end of file</title>
    <link>https://coboltextbook.com/posts/cobol-read-sequential-file.html</link>
    <guid>https://coboltextbook.com/posts/cobol-read-sequential-file.html</guid>
    <description>SELECT, FD, OPEN, the priming READ and AT END: a complete program reads a 60-byte customer file to end of file and prints control totals; data and copybook ship.</description>
    <pubDate>2026-09-05T00:00:00Z</pubDate>
  </item>
  <item>
    <title>COBOL PICTURE clause: 9, X, A, V, S and how a number is stored</title>
    <link>https://coboltextbook.com/posts/cobol-picture-clause-9-x-a-v-s.html</link>
    <guid>https://coboltextbook.com/posts/cobol-picture-clause-9-x-a-v-s.html</guid>
    <description>What each PICTURE symbol means, how PIC 9(3)V99 occupies five bytes with no decimal point, and what S and P really do, shown by one GnuCOBOL program.</description>
    <pubDate>2026-09-05T00:00:00Z</pubDate>
  </item>
  <item>
    <title>PERFORM VARYING, PERFORM UNTIL, and inline PERFORM in COBOL</title>
    <link>https://coboltextbook.com/posts/cobol-perform-varying-until-inline.html</link>
    <guid>https://coboltextbook.com/posts/cobol-perform-varying-until-inline.html</guid>
    <description>Every common COBOL loop in one GnuCOBOL program: PERFORM TIMES, UNTIL with TEST BEFORE and TEST AFTER, inline VARYING over a table, nested AFTER, and EXIT PERFORM.</description>
    <pubDate>2026-09-05T00:00:00Z</pubDate>
  </item>
  <item>
    <title>COBOL OCCURS and subscripts: a table of monthly totals</title>
    <link>https://coboltextbook.com/posts/cobol-occurs-subscripts-table.html</link>
    <guid>https://coboltextbook.com/posts/cobol-occurs-subscripts-table.html</guid>
    <description>OCCURS builds a table; subscripts index it from 1. A worked program sums twelve monthly totals, finds the best month, fills a 3-by-4 grid and uses DEPENDING ON.</description>
    <pubDate>2026-09-05T00:00:00Z</pubDate>
  </item>
  <item>
    <title>COBOL MOVE statement and the truncation rules that surprise everyone</title>
    <link>https://coboltextbook.com/posts/cobol-move-truncation-rules.html</link>
    <guid>https://coboltextbook.com/posts/cobol-move-truncation-rules.html</guid>
    <description>Seven MOVEs in one GnuCOBOL program show where COBOL truncates on the right, on the left, drops a sign, or copies bytes blindly in a group move, with a rules table.</description>
    <pubDate>2026-09-05T00:00:00Z</pubDate>
  </item>
  <item>
    <title>Your first COBOL program: all four divisions, DISPLAY, STOP RUN</title>
    <link>https://coboltextbook.com/posts/cobol-hello-world-four-divisions.html</link>
    <guid>https://coboltextbook.com/posts/cobol-hello-world-four-divisions.html</guid>
    <description>A complete first COBOL program for GnuCOBOL, explained division by division, with DISPLAY, WITH NO ADVANCING, signed and unsigned numbers, and STOP RUN.</description>
    <pubDate>2026-09-05T00:00:00Z</pubDate>
  </item>
  <item>
    <title>COBOL group items and elementary items: the record layout as a struct</title>
    <link>https://coboltextbook.com/posts/cobol-group-items-elementary-items.html</link>
    <guid>https://coboltextbook.com/posts/cobol-group-items-elementary-items.html</guid>
    <description>How level numbers 01 to 49, 77 and 88 build a record; what a group move does to the bytes; a worked 80-byte customer record with its byte offsets.</description>
    <pubDate>2026-09-05T00:00:00Z</pubDate>
  </item>
  <item>
    <title>COBOL edited pictures: money with Z, comma, period, CR and minus</title>
    <link>https://coboltextbook.com/posts/cobol-edited-pictures-money.html</link>
    <guid>https://coboltextbook.com/posts/cobol-edited-pictures-money.html</guid>
    <description>Numeric-edited PICTURE strings format amounts for people. Eight edited items receive the same five values; a table shows every result and the rules that produce it.</description>
    <pubDate>2026-09-05T00:00:00Z</pubDate>
  </item>
  <item>
    <title>COMPUTE, ROUNDED, ON SIZE ERROR: COBOL arithmetic without overflow</title>
    <link>https://coboltextbook.com/posts/cobol-compute-rounded-on-size-error.html</link>
    <guid>https://coboltextbook.com/posts/cobol-compute-rounded-on-size-error.html</guid>
    <description>One GnuCOBOL program: COMPUTE with and without ROUNDED, ROUNDED MODE IS NEAREST-EVEN on a tie, an overflow caught by ON SIZE ERROR, and a trapped divide by zero.</description>
    <pubDate>2026-09-05T00:00:00Z</pubDate>
  </item>
  <item>
    <title>A COBOL bank-statement batch job: read, validate, total, report</title>
    <link>https://coboltextbook.com/posts/cobol-bank-statement-batch-job.html</link>
    <guid>https://coboltextbook.com/posts/cobol-bank-statement-batch-job.html</guid>
    <description>A complete GnuCOBOL batch program that reads sorted transactions, rejects bad records to a file, breaks on account change, and writes a statement with totals.</description>
    <pubDate>2026-09-05T00:00:00Z</pubDate>
  </item>
</channel></rss>
