COBOL PIC (Picture) clause parsing library
gopic
is both a tool and package, it's purpose is to help you process COBOL copybook files with ease
gopic
can be used to enable simpler 1:1 mapping of PIC definitions to Go structs.
Simply open your data file and pass it to a gopic decoder with the struct that represents the source copybook
Show usage
-
Import gopic
import ( pic "github.com/foundatn-io/go-pic" )
-
Tag your structs
Say your copybook data looks like
000180 15 PropertyA PIC X(5). 00000117 000190 15 PropertyB PIC X(2). 00000118
You would tag your struct like so
type yourStruct struct { PropertyA string `pic:"5"` PropertyB string `pic:"2"` }
-
Prepare a decoder and unmarshal your input
d := pic.NewDecoder(f) // where f is your io.Reader / data typ := yourStruct{} // with pic tags if err := d.Decode(typ); err != nil { log.Fatal(err) }
gopic
can be used to generate simpler 1:1 mapping of PIC definitions to Go structs.
gopic
provides support to generate flattened Go struct representations of your COBOL copybooks, tagged with length statements and assigned the appropriate type for unmarshalling files that match your COBOL copybook definitions, so you need not manually create or tag your structs when using go-pic
for unmarshalling.
Show usage
-
Install gopic!
Get started using
gopic
by for struct generation by running:git clone github.com/foundatn-io/go-pic cd go-pic make install
-
Generate structs from a copybook file (long-form flags)
gopic file --package=shipping --output=shipping --input=cobolstuff/copybook-shipping.txt
-
Generate many structs from a directory containing only copybooks (short-form flags)
gopic dir -p mystructsdir -o mystructsdir -i cobolstuff
When using gopic
for struct generation, additional, non-functional values are tagged to the PIC tags, for legibility's sake.
For example, the example copybook clauses:
000180 15 PropertyA PIC 9(5). 00000117
000190 15 PropertyB PIC X(2). 00000118
if generated with gopic
becomes:
type Copybook struct{
PropertyA uint `pic:"9"` // start:1 end:9
PropertyB string `pic:"2"` // start:10 end:11
}
- PIC symbols [
S
,V
,P
] - Level indicator 88 enums are skipped
- Level indicator 77 items which cannot be sub-divided