On Thu, 24 Dec 2015 10:02:35 -0500, Richards, Robert B. wrote:

>You have an *IBM rep*? <grin>
>
>I also wish that the HOLDs file was in a format that could easily be imported 
>into EXCEL so that I could use filtering criteria.
>
Heres a hack at converting HOLDDATA to CSV.  (I left out the hard part:
parsing the COMMENT(...) )

#! /bin/sh

# Doc: convert IBM HOLDDATA (Argument or stdin) to CSV.
# Bug: Doesn't parse COMMENT correctly.

awk 'BEGIN {
    KN = split( "WHAT HOLD FMID WHY REASON CLASS SYMP DATE COMMENT", KL )
    Sep = ""; for ( I = 1; I<=KN; I++ ) {
        printf( "%s", Sep    KL[ I ]   )
        Sep = ", " }
    print( "\n-----" ) }

function PutKey( key, val ) {
    gsub( /\"/, "\"\"", val )
    if ( match( val, /[,"]/ ) ) val = "\""val"\""
    A[ key ] = val }

function ParseOpts() {
    sub( /^ \+\+ */, "", Buffer )
    sub( /[ .]*$/, " ", Buffer )
    PutKey( "CLASS", "n/a" )
    PutKey( "SYMP",  "n/a" )
    while ( Buffer ) {
        match( Buffer, / / )
        KV = substr( Buffer, 1, RSTART - 1 )
        Buffer = substr( Buffer, RSTART )
        sub( /^ */, "", Buffer )
        K = KV
        if ( sub( /\(.*/, "", K ) ) {
            sub( /[^(]*\(/, "", KV )
            sub( /\)$/, "", KV ) }
        else K = "WHY"
        if ( K=="RELEASE" ) {
            PutKey( "WHAT", "Rel" )
            PutKey( "HOLD", KV ) }
        if ( K=="HOLD" ) {
            PutKey( "WHAT", "Hold") }
        PutKey( K, KV ) }
    }

function DumpBuff() {
    split( "", A )              # Clear work array.
    sub( /[ .]$/, " ", Buffer ) # Remove terminating "."; append one space.
    B = Buffer
    sub( /^[^(]*\(/, "", B )
    sub( /\).*/, "", B )

    ParseOpts()

    Sep = ""; for ( I = 1; I<=KN; I++ ) {
        printf( "%s", Sep A[ KL[ I ] ] )
        Sep = ", " }
    print( " " )
    }

/^\+\+ *NULL/ { next }

/^\+\+/ { 
    if ( Buffer ) DumpBuff()
    Buffer = "" }

{   Buffer = Buffer" "substr( $0, 1, 72 )
    sub( /  *$/, "", Buffer ) }

END { DumpBuff() }
' "$@"

-- gil

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

Reply via email to