Knowledge Base

Welcome to The Carlisle Group's Knowledge Base.

Search or Ask a Question

This is a keyword search that looks for matching articles that contain one or more words specifically by a user in articles’ tags, title and content. Admin writes brief intro content here via admin end. If you are unable to find an answer to your issue, please submit an issue here.

Back to Articles List

Sample Script - Delmit a field on each character or separator. | CAS 6.0

Added: 01/13/2016; Last Modified: 01/25/2016; Visits:1,654

⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝
⍝⍝ Description =
⍝⍝
⍝⍝ Written By  = The Carlisle Group, Inc.
⍝⍝ Date        = Jan 13, 2016 13:11
⍝⍝ CAS         = 6.0.304
⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝

⍝ Get Current file and list of field names.
 CAS←CasSession.GetCurrentFile''
 FNames←CAS.GetFieldNames''

⍝ Start a new Wizard and set default properties.
 W←Wizard.New''

 W.Sizeable←0
 W.Start''
 W.LastPage'Finish'

⍝ Create a new page to get user inputs and create input fields.
 P1←WizGetInputs.New W
 P1.Title←'Delimit a field'
 P1.AddInput'DropCombo' 'Field' 'Field:'FNames
 P1.AddInput'DropCombo' 'Order' 'Order:' 'Left To Right,Right To Left'
 P1.AddInput'Edit' 'Delimiter' 'Delimiter:'
 P1.AddInput'DropCombo' 'FieldType' 'Field Type:' 'Numeric,Text'
 P1.AddInput'Edit' 'Prefix' 'Prefix:'

⍝ Pre-defined values for user inputs.
 P1.UserInput.Field←''                         ⍝ Default fields goes between quotes.
 P1.UserInput.Order←'Left To Right'
 P1.UserInput.Prefix←'PS_'
 P1.UserInput.FieldType←'Numeric'

 P1.Run''
 W.End''

⍝ Create fields.
 :Trap 0

    ⍝ Get order and create expression.
     FN←CharString.New P1.UserInput.Field
     Order←CharString.New P1.UserInput.Order
     :If Order.Equal'Left To Right'
         Exp_Txt_Field←CharString.New'(makechar '
         Exp_Txt_Field.Add FN
         Exp_Txt_Field.Add')'
     :Else
         Exp_Txt_Field←CharString.New'(rotate makechar '
         Exp_Txt_Field.Add FN
         Exp_Txt_Field.Add')'
     :EndIf

    ⍝ Get delimiter and field type.
     DLM←CharString.New P1.UserInput.Delimiter
     Field_Type←CharString.New P1.UserInput.FieldType

    ⍝ Each character is its own field, no delimiter
     :If (DLM.Length'').Eq 0                         ⍝ If delimiter is blank
         Exp←CharString.New'high length '            ⍝ Highest length
         Exp.Add Exp_Txt_Field
         Indices←Numeric.New CAS.Execute Exp

       ⍝ Create expression for each item.
         :For I :In Indices.GenerateIndices 1
             Exp←CharString.New''
             :If Field_Type.Equal'Numeric'           ⍝ Force data type
                 Exp.Add'makenum '
             :Else
                 Exp.Add'makechar '
             :EndIf
             Exp.Add I.ToString''
             Exp.Add' index '
             Exp.Add Exp_Txt_Field

             F←CAS.Execute Exp

             Name←CharString.New P1.UserInput.Prefix
             Name.Add I.ToString''

            ⍝ Add each new field
             CAS.AddField(Name.ToUpper'')F
         :EndFor
     :Else                                           ⍝ If a delimiter is sepcified
       ⍝ Process on delimiter
         Exp←CharString.New'high 1 plus '            ⍝ Total of delimiter +1
         Exp.Add Exp_Txt_Field                       ⍝ 1 plus (makechar PAYHIST2) sumchars ','
         Exp.Add' sumchars '''
         Exp.Add DLM
         Exp.Add''''

         Indices←Numeric.New CAS.Execute Exp
         :For I :In Indices.GenerateIndices 1
             Exp←CharString.New''
             :If Field_Type.Equal'Numeric'           ⍝ Force data type
                 Exp.Add'makenum '
             :Else
                 Exp.Add'makechar '
             :EndIf
             Exp.Add'word '
             Exp.Add Exp_Txt_Field
             Exp.Add' '''
             Exp.Add DLM
             Exp.Add''' '
             Exp.Add I.ToString''

             F←CAS.Execute Exp
             Name←CharString.New P1.UserInput.Prefix
             Name.Add I.ToString''

             CAS.AddField(Name.ToUpper'')F
         :EndFor
     :EndIf
 :EndTrap

⍝ Show output.  You can comment line below to skip
 CAS.Show''

⍝ Add fields back to the file.
 CAS.SetCurrentFile''