Skip to content

A tool for visualizing fixed format files from mainframe

License

Notifications You must be signed in to change notification settings

danielefdf/blip

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 
 
 
 
 

Repository files navigation

blip

A command-line tool for visualizing fixed format files from mainframe.

On the mainframe it may happen to come across fixed format files, i.e. files in which data is written in this way:

01NAME1      SURNAME101/01/0001
02NAME2      SURNAME202/01/0001
03NAME3      SURNAME303/01/0001

Everything is simple until you find files in which the records are defined differently (see CoBOL REDEFINE) according to one or more reference fields: in this case it is not easy to read the file, especially if there are many redefinitions and many records.

This tool allows you to interpret the data, given the reference CoBOL structure.

use of the tool

For example, let's define the data and the reference CoBOL copy as follows:

  • data

    a01xyz00abcdef.
    a02xyz10abbccc.
    a03xyz21aa@@@b.
    a04xyz22@@@@@@.
    a05xyz30aaab@@.
    a06xyz10deefff.
    a07xyz21cc@@@d.
    a08xyz22@@@@@@.
    a09xyz10ghhiii.
    a10xyz30cccd@@.
    a11xyz30eeef@@.
    a12xyz30gggh@@.
    a13xyz30iiij@@.
    a14xyz90abcdef.
    

    ON MAINFRAMES

    • files must be in native EBCDIC encoding

    ON WINDOWS

    • plain data files can be in ASCII encoding
    • files with signed, comp, comp-3 fields must be in EBCDIC encoding (binary transfer)
  • copy

          01  field01.
               03 rec-header.
    01-01         05 rec-header-field-01     pic x(1).
    02-03         05 rec-header-field-02     pic x(2).
    04-06         05 rec-header-field-03     pic x(3).
    07-07      03 rec-type                   pic x(1).
                  88 rec-type-1                        value '1'.
                  88 rec-type-2                        value '2'.
                  88 rec-type-3                        value '3'.
    08-08      03 rec-subtype                pic x(1).
                  88 rec-subtype-0                     value '0'.
                  88 rec-subtype-1                     value '1'.
                  88 rec-subtype-2                     value '2'.
    09-14      03 rec-body                   pic x(6).
    09-14      03 rec-body-01
                  redefines rec-body.
                  05 rec-body-01-field-01    pic x(1).
                  05 rec-body-01-field-02    pic x(2).
                  05 rec-body-01-field-03    pic x(3).
    09-14      03 rec-body-02-01
                  redefines rec-body.
                  05 rec-body-02-01-field-02 pic x(2).
                  05 filler                  pic x(3).
                  05 rec-body-02-01-field-01 pic x(1).
    09-14      03 rec-body-02-02
                  redefines rec-body         pic x(6).
    09-14      03 rec-body-03
                  redefines rec-body.
                  05 rec-body-03-field-03    pic x(3).
                  05 rec-body-03-field-01    pic x(1).
                  05 filler                  pic x(2).
    15-15      03 rec-footer                 pic x(1).

At start, the tool shows this menu:

blip> enter command:
    e: edit console
    c: view copy
    d: view data...
    x: exit blip
  • e shows a file with the parms for the tool

    *
    * file data
    *     dataset
              C:\ ... blip\data\example1.ascii
    *     ebcdic/ascii
              ascii
    *     lseq/seq
              lseq
    *
    * file copy
    *     dataset
              C:\ ... blip\data\example1.cpy
    *
    * options
    *     max number of records
              99
    *     max length for alphanumeric fields
              99
    *     restart record cursor for level
              99
    *
    *
    *
    

    The dataset and the copy can be set here.

    • lseq means that every record in the dataset terminates with a newline char (seq means the opposite).

      The presence of the newline char depends on what type of file-transfer is used.

  • c shows the copy as interpreted by the tool:

    ;level;label                               ;picture             ; occurs;redefines                           ;  int;  dec; from;   to;  len;structure                                                                                           ;
    ;     ;                                    ;                    ;       ;                                    ;     ;     ;     ;     ;     ;                                                                                                    ;
    ;    1;field01                             ;GROUP               ;       ;                                    ;    0;    0;    1;   15;   15; |01                                                                                                ;
    ;    3;rec-header                          ;GROUP               ;       ;                                    ;    0;    0;    1;    6;    6; | |03                                                                                              ;
    ;    5;rec-header-field-01                 ;x                   ;       ;                                    ;    1;    0;    1;    1;    1; | | |05                                                                                            ;
    ;    5;rec-header-field-02                 ;x(2)                ;       ;                                    ;    2;    0;    2;    3;    2; | | |05                                                                                            ;
    ;    5;rec-header-field-03                 ;x(3)                ;       ;                                    ;    3;    0;    4;    6;    3; | | |05                                                                                            ;
    ;    3;rec-type                            ;x                   ;       ;                                    ;    1;    0;    7;    7;    1; | |03                                                                                              ;
    ;    3;rec-subtype                         ;x                   ;       ;                                    ;    1;    0;    8;    8;    1; | |03                                                                                              ;
    ;    3;rec-body                            ;x(6)                ;       ;                                    ;    6;    0;    9;   14;    6; | |03                                                                                              ;
    ;    3;rec-body-01                         ;GROUP               ;       ;rec-body                            ;    0;    0;    9;   14;    6; | |03                                                                                              ;
    ;    5;rec-body-01-field-01                ;x                   ;       ;                                    ;    1;    0;    9;    9;    1; | | |05                                                                                            ;
    ;    5;rec-body-01-field-02                ;x(2)                ;       ;                                    ;    2;    0;   10;   11;    2; | | |05                                                                                            ;
    ;    5;rec-body-01-field-03                ;x(3)                ;       ;                                    ;    3;    0;   12;   14;    3; | | |05                                                                                            ;
    ;    3;rec-body-02-01                      ;GROUP               ;       ;rec-body                            ;    0;    0;    9;   14;    6; | |03                                                                                              ;
    ;    5;rec-body-02-01-field-02             ;x(2)                ;       ;                                    ;    2;    0;    9;   10;    2; | | |05                                                                                            ;
    ;    5;filler-(1)                          ;x(3)                ;       ;                                    ;    3;    0;   11;   13;    3; | | |05                                                                                            ;
    ;    5;rec-body-02-01-field-01             ;x                   ;       ;                                    ;    1;    0;   14;   14;    1; | | |05                                                                                            ;
    ;    3;rec-body-02-02                      ;x(6)                ;       ;rec-body                            ;    6;    0;    9;   14;    6; | |03                                                                                              ;
    ;    3;rec-body-03                         ;GROUP               ;       ;rec-body                            ;    0;    0;    9;   14;    6; | |03                                                                                              ;
    ;    5;rec-body-03-field-03                ;x(3)                ;       ;                                    ;    3;    0;    9;   11;    3; | | |05                                                                                            ;
    ;    5;rec-body-03-field-01                ;x                   ;       ;                                    ;    1;    0;   12;   12;    1; | | |05                                                                                            ;
    ;    5;filler-(2)                          ;x(2)                ;       ;                                    ;    2;    0;   13;   14;    2; | | |05                                                                                            ;
    ;    3;rec-footer                          ;x                   ;       ;                                    ;    1;    0;   15;   15;    1; | |03                                                                                              ;
    
  • d opens a submenu:

    blip> viewData> enter command:
    r: select records...
    c: select columns...
    v: view data
    m: return to parent menu
    x: exit blip
    

Here, r and c allow you to filter the rows and columns to be displayed, and to set the criteria for which a certain REDEFINE must be used for a given condition.

In the example, let's say we filter the rows as follows:

 field ------------------------------------- query
 ALL FIELDS                                  [][]
 field01.                                    [][]
  rec-header.                                [][]
   rec-header-field-01                       [][]
   rec-header-field-02                       [][]
   rec-header-field-03                       [][]
  rec-type                                   [>][1]
  rec-subtype                                [][]
  rec-body                                   [][]
  rec-body-01.                               [][]
   rec-body-01-field-01                      [][]
   rec-body-01-field-02                      [][]
   rec-body-01-field-03                      [][]
  rec-body-02-01.                            [][]
   rec-body-02-01-field-02                   [][]
   filler-(1)                                [][]
   rec-body-02-01-field-01                   [][]
  rec-body-02-02                             [][]
  rec-body-03.                               [][]
   rec-body-03-field-03                      [][]
   rec-body-03-field-01                      [][]
   filler-(2)                                [][]
  rec-footer                                 [][]

And let's say we define the columns as follows:

 when [rec-type][=][01]
 show [rec-header]
 and  [rec-type]
 and  [rec-body-01]
 and  [rec-footer]

 when [rec-type][=][02]
 and  [rec-subtype][=][01]
 show [rec-header]
 and  [rec-type]
 and  [rec-body-02-01]
 and  [rec-footer]

 when [rec-type][=][02]
 and  [rec-subtype][=][02]
 show [rec-header]
 and  [rec-type]
 and  [rec-body-02-02]
 and  [rec-footer]

 when [rec-type][=][03]
 show [rec-header]
 and  [rec-type]
 and  [rec-body-03]
 and  [rec-footer]

default
show [*]

With v, the tool provides a report as follows:

 rec    ; rec    ; rec    ; rec  ; rec   ; filler ; rec   ; rec    ; 
 header ; header ; header ; type ; body  ; (1)    ; body  ; footer ; 
 field  ; field  ; field  ;      ; 02    ;        ; 02    ;        ; 
 01     ; 02     ; 03     ;      ; 01    ;        ; 01    ;        ; 
        ;        ;        ;      ; field ;        ; field ;        ; 
        ;        ;        ;      ; 02    ;        ; 01    ;        ; 
        ;        ;        ;      ;       ;        ;       ;        ; 
 a      ; 03     ; xyz    ; 2    ; aa    ; @@@    ; b     ; .      ; 

 rec    ; rec    ; rec    ; rec  ; rec    ; rec    ; 
 header ; header ; header ; type ; body   ; footer ; 
 field  ; field  ; field  ;      ; 02     ;        ; 
 01     ; 02     ; 03     ;      ; 02     ;        ; 
        ;        ;        ;      ;        ;        ; 
        ;        ;        ;      ;        ;        ; 
        ;        ;        ;      ;        ;        ; 
 a      ; 04     ; xyz    ; 2    ; @@@@@@ ; .      ; 

 rec    ; rec    ; rec    ; rec  ; rec   ; rec   ; filler ; rec    ; 
 header ; header ; header ; type ; body  ; body  ; (2)    ; footer ; 
 field  ; field  ; field  ;      ; 03    ; 03    ;        ;        ; 
 01     ; 02     ; 03     ;      ; field ; field ;        ;        ; 
        ;        ;        ;      ; 03    ; 01    ;        ;        ; 
        ;        ;        ;      ;       ;       ;        ;        ; 
        ;        ;        ;      ;       ;       ;        ;        ; 
 a      ; 05     ; xyz    ; 3    ; aaa   ; b     ; @@     ; .      ; 

 rec    ; rec    ; rec    ; rec  ; rec   ; filler ; rec   ; rec    ; 
 header ; header ; header ; type ; body  ; (1)    ; body  ; footer ; 
 field  ; field  ; field  ;      ; 02    ;        ; 02    ;        ; 
 01     ; 02     ; 03     ;      ; 01    ;        ; 01    ;        ; 
        ;        ;        ;      ; field ;        ; field ;        ; 
        ;        ;        ;      ; 02    ;        ; 01    ;        ; 
        ;        ;        ;      ;       ;        ;       ;        ; 
 a      ; 07     ; xyz    ; 2    ; cc    ; @@@    ; d     ; .      ; 

 rec    ; rec    ; rec    ; rec  ; rec    ; rec    ; 
 header ; header ; header ; type ; body   ; footer ; 
 field  ; field  ; field  ;      ; 02     ;        ; 
 01     ; 02     ; 03     ;      ; 02     ;        ; 
        ;        ;        ;      ;        ;        ; 
        ;        ;        ;      ;        ;        ; 
        ;        ;        ;      ;        ;        ; 
 a      ; 08     ; xyz    ; 2    ; @@@@@@ ; .      ; 

 rec    ; rec    ; rec    ; rec  ; rec   ; rec   ; filler ; rec    ; 
 header ; header ; header ; type ; body  ; body  ; (2)    ; footer ; 
 field  ; field  ; field  ;      ; 03    ; 03    ;        ;        ; 
 01     ; 02     ; 03     ;      ; field ; field ;        ;        ; 
        ;        ;        ;      ; 03    ; 01    ;        ;        ; 
        ;        ;        ;      ;       ;       ;        ;        ; 
        ;        ;        ;      ;       ;       ;        ;        ; 
 a      ; 10     ; xyz    ; 3    ; ccc   ; d     ; @@     ; .      ; 
 a      ; 11     ; xyz    ; 3    ; eee   ; f     ; @@     ; .      ; 
 a      ; 12     ; xyz    ; 3    ; ggg   ; h     ; @@     ; .      ; 
 a      ; 13     ; xyz    ; 3    ; iii   ; j     ; @@     ; .      ; 

 rec    ; rec    ; rec    ; rec  ; rec     ; rec    ; rec   ; rec   ; rec   ; rec   ; filler ; rec   ; rec    ; rec   ; rec   ; filler ; rec    ; 
 header ; header ; header ; type ; subtype ; body   ; body  ; body  ; body  ; body  ; (1)    ; body  ; body   ; body  ; body  ; (2)    ; footer ; 
 field  ; field  ; field  ;      ;         ;        ; 01    ; 01    ; 01    ; 02    ;        ; 02    ; 02     ; 03    ; 03    ;        ;        ; 
 01     ; 02     ; 03     ;      ;         ;        ; field ; field ; field ; 01    ;        ; 01    ; 02     ; field ; field ;        ;        ; 
        ;        ;        ;      ;         ;        ; 01    ; 02    ; 03    ; field ;        ; field ;        ; 03    ; 01    ;        ;        ; 
        ;        ;        ;      ;         ;        ;       ;       ;       ; 02    ;        ; 01    ;        ;       ;       ;        ;        ; 
        ;        ;        ;      ;         ;        ;       ;       ;       ;       ;        ;       ;        ;       ;       ;        ;        ; 
 a      ; 14     ; xyz    ; 9    ; 0       ; abcdef ; a     ; bc    ; def   ; ab    ; cde    ; f     ; abcdef ; abc   ; d     ; ef     ; .      ; 

In this example, the last record doesn't match any criteria, so all fields of the copy are shown.

This repository is licensed under MIT (c) 2020 GitHub, Inc.

About

A tool for visualizing fixed format files from mainframe

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages