H Option( *NoDebugIO : *SrcStmt ) NoMain // PgmInfo( *PCML : *Module ) NoMain // Program: STRINGS_SP Author: Tommy Holden // Date: 04-05-2011 // // Purpose: Service Program For String/Character Manipulation Functions // _____________________________________________________________________ // Procedure - CENTER_DATA() - Exported // Parameters: // String: Character Max Size 65535 // Return String Length: Integer Const // _____________________________________________________________________ // Procedure - MIX_CASE() - Not Exported // Parameters: // String: Character Max Size 65535 // String Length: Integer Const // _____________________________________________________________________ // Procedure - CONVERT_CASE() - Exported // Parameters: // String: Character Max Size 65535 // String Length: Integer Const // Operation: Constant 'UPPER','LOWER','MIXED' // _____________________________________________________________________ // Procedure - STRIP_SPECIAL_CHARS() - Exported // Parameters: // String: Character Max Size 65535 // String Length: Integer Const // Copy In Prototypes /Copy QCopySrc,Strings_Pr // Prototypes For Non-Exported Procedures d Mix_Case pr d String 65535a Options( *VarSize ) d String_Length 10i 0 Const // Exported Procedures p Center_Data b Export d Center_Data pi d String 65535a Options( *VarSize ) d String_Length 10i 0 Const d Work_Data s 65535a d Start_Position s 10i 0 d Data_Length s 10i 0 d Divisor s 5i 0 /free If String <> ' '; Divisor = String_Length / 2; Data_Length = %Len( %Trim( %Subst( String : 1 : String_Length ) ) ); If Data_Length = String_Length; Return; EndIf; Start_Position = Divisor - ( Data_Length / 2 ); Work_Data = %Subst( String : 1 : String_Length ); %Subst( String : 1 : String_Length ) = ' '; If ( Start_Position + Data_Length ) <= String_Length ; %Subst( String : Start_Position : Data_Length ) = %Trim( Work_Data ); Else; %Subst( String : 1 : String_Length ) = %Trim( Work_Data ); EndIf; EndIf; Return; /end-free pCenter_Data e pConvert_Case b Export dConvert_Case pi d String 65535a Options( *VarSize ) d String_Length 10i 0 Const d Operation 5a Const // Local Variables & Constants d Lower_Case c Const('abcdefghijklmnopqrstuvwxyz') d Upper_Case c Const('ABCDEFGHIJKLMNOPQRSTUVWXYZ') /free Select; When Operation = Upper; %Subst( String : 1 : String_Length ) = %XLate( Lower_Case : Upper_Case : %Subst( String : 1 : String_Length ) ); When Operation = Lower; %Subst( String : 1 : String_Length ) = %XLate( Upper_Case : Lower_Case : %Subst( String : 1 : String_Length ) ); When Operation = Mixed; Mix_Case( String : String_Length ); EndSl; Return; /end-free pConvert_Case e pMix_Case b dMix_Case pi d String 65535a Options( *VarSize ) d String_Length 10i 0 Const // Local Variables & Constants d Work_String s 65535a d i s 10i 0 d Converted s n d Position s 10i 0 d Lower_Case c Const('abcdefghijklmnopqrstuvwxyz') d Upper_Case c Const('ABCDEFGHIJKLMNOPQRSTUVWXYZ') d Apostrophe c Const('''') /free Work_String = %Subst( String : 1 : String_Length ); Work_String = %XLate( Upper_Case : Lower_Case : Work_String ); For i = 1 To String_Length; If %Subst( Work_String : i : 1 ) = ' '; Converted = *Off; Else; If Not Converted; %Subst( Work_String : i : 1 ) = %XLate( Lower_Case : Upper_Case : %Subst( Work_String : i : 1 ) ); Converted = *On; EndIf; If Converted And %Subst( Work_String : i : 1 ) = Apostrophe; Converted = *Off; EndIf; EndIf; EndFor; %Subst( String : 1 : String_Length ) = %Subst( Work_String : 1 : String_Length ); Return; /end-free pMix_Case e pStrip_Special_Chars... p b Export dStrip_Special_Chars... d pi d String 65535a Options( *VarSize ) d Length 10i 0 Const d Keep_Blanks_In... d n Const Options( *NoPass ) // Local Variables & Constants d Work_String s 65535a d i s 10i 0 d x s 10i 0 d SP_DS ds Qualified d Special_Chars 30a d Chars 1a Dim( 30 ) Overlay( Special_Chars ) d Keep_Blanks s n /free If %Parms >= %ParmNum( Keep_Blanks_In ); Keep_Blanks = Keep_Blanks_In; Else; Keep_Blanks = *On; EndIf; SP_DS.Special_Chars = '`~!@#$%^&*()_-+=''";,.<>/?\|]{}'; Work_String = %Subst( String : 1 : Length ); %subst(work_string:65535:1) ='x'; For i = 1 To Length; For x = 1 To %Elem( SP_DS.Chars ); If ( %Scan( SP_DS.Chars( x ) : %Subst( Work_String : i : 1 ) ) = 0 ); Iter; EndIf; If Keep_Blanks; %Subst( Work_String : i : 1 ) = %XLate( SP_DS.Chars( x ) : ' ' : %Subst( Work_String : i : 1 ) ); Leave; Else; %Subst( Work_String : i ) = %Subst( Work_String : i + 1 ); i -= 1; Leave; EndIf; EndFor; EndFor; %Subst( String : 1 : Length ) = %Subst( Work_String : 1 : Length ); Return; /end-free pStrip_Special_Chars... p e pMixed_Case b Export dMixed_Case pi 32000a Varying d String 32000a Varying d Work_String s 65535a d Length s 10i 0 /free Work_String = String; Mix_Case( Work_String : %Len( String ) ); String = %Trim( Work_String ); Return String; /end-free pMixed_Case e pStrip_Special b Export dStrip_Special pi 32000a Varying d String 32000a Varying d Work_String s 65535a d Length s 10i 0 /free Work_String = String; Strip_Special_Chars( Work_String : %Len( String ) : *On ); String = %Trim( Work_String ); Return String; /end-free pStrip_Special e