Trying to find and replace text in an IFS file using CLOB files

131 Views Asked by At

I'm trying to find and replace text in a given IFS file. I have used the same code before for replacing lines in this config file. However, we are adding a new config option, so I'm automating the turning on and off of it.

The code below executes and returns and sqlcod of 0 when doing the 'exec SQL set', but nothing in the file gets changed. I'm not sure if it doesn't like the spaces in the text I'm replacing or what. Any help is appreciated.

//----------
    //Variables
    //----------
    dcl-s toF SQLTYPE(CLOB_File);
    dcl-s frmF SQLTYPE(CLOB_File);
    dcl-s clcmd varchar(2024);
    dcl-s path char(512);
    dcl-s sslTxt char(15) ccsid(37);

    //-----------------
    // Data Structures
    //-----------------
    //DCL-DS PGMSDS   PSDS       Qualified;
    //    MsgTxt        Char(80)   Pos(91);
    //End-Ds;

    //----------
    //Constants
    //----------
    dcl-c lower const('abcdefghijklmnopqrstuvwxyz');
    dcl-c upper const('ABCDEFGHIJKLMNOPQRSTUVWXYZ');

    //-----------
    //Prototypes
    //-----------
    ///include sndmsg;

    dcl-pr runcmd extpgm('QCMDEXC');
        *n char(2024) options(*varsize) const;
        *n packed(15:5) const;
    end-pr;

    dcl-pi *n;
       sys char(3);
       par char(3);
       ssl char(1) ccsid(37);
    end-pi;

    //------
    // Main
    //------
    Exec SQL   Set Option  Commit=*None, DatFmt=*ISO, TimFmt=*ISO,
                          Naming=*SYS,  CloSQLCsr=*EndActGrp;
    exsr cPath;
    exsr mkBak;
    exsr chgF;
    exsr chown;
    exsr endpgm;

    //---------------
    //Construct path
    //---------------
    begsr cPath;
        path = '/LANSA_' + %xlate(upper:lower:sys) +
               'pgmlib/x_lansa/x_' + %xlate(lower:upper:par) +
               '/execute/SD1_FRAMEWORK_ENG_VLFONE_Definition.DAT';
    endsr;

    //------------------
    //Make copy of file
    //------------------
    begsr mkBak;
        clcmd = 'CPY OBJ('''+ %trim(path) +''') ' +
                'TOOBJ('''+ %trim(path) + '.bak' +''') ' +
                'REPLACE(*YES) ' +
                'OWNER(*KEEP) ';

        runcmd(%trim(clcmd): %len(%trim(clcmd)));

        clear clcmd;
    endsr;

    //----------
    //Edit File
    //----------
    begsr chgF;
        monitor;
        frmF_Name = %trim(path) + '.bak';
        frmF_NL = %len(%trim(frmF_Name));
        frmF_FO = SQFRD;

        toF_Name = %trim(path);
        toF_NL = %len(%trim(toF_Name));
        toF_FO = SQFOVR;

        if ssl = 'N';
            sslTxt = 'P   239 1 FALSE';
        endif;


            exec SQL Set :toF = replace(:frmF,
                               'P   239 1 TRUE', :sslTxt);


        on-error;

        endmon;
    endsr;

    //------------------
    //Change File Owner
    //------------------
    begsr chown;

        clcmd = 'chgown obj(''' + %trim(path) + ''')' +
               ' newown(QOTHPRDOWN)';
        //runcmd(%trim(clcmd): %len(%trim(clcmd)));
        clear clcmd;

        clcmd = 'chgown obj(''' + %trim(path) + '.bak' + ''')' +
               ' newown(QOTHPRDOWN)';
       //runcmd(%trim(clcmd): %len(%trim(clcmd)));
        clear clcmd;

    endsr;

    //-------------
    // End Program
    //-------------
    begsr endpgm;
       *inlr = *on;
       return;
    endsr;
0

There are 0 best solutions below