Replace characters in a string
;
Optimize procedure
;
Parameter PF_Field_to_check (Field name)
Parameter PC_Look_For (Character 10000000)
Parameter PC_Change_To (Character 10000000)
Other parameters are optional
Parameter PB_Match_Case (Boolean) = kTrue ;; Match the case of the word?
Parameter PB_Match_Everytime (Boolean) = kTrue
Parameter PB_Whole_Words (Boolean) = kFalse ;; Only match whole words
;
Calculate LC_RETURN as ''
Calculate LC_WORK_WITH as PF_Field_to_check
If not(PB_Match_Case)
Calculate PC_Look_For as upp(PC_Look_For)
End If
Calculate LN_Len_Look4 as len(PC_Look_For)
Calculate LN_POS_FIND as pick(PB_Match_Case,pos(PC_Look_For,upp(LC_WORK_WITH)),pos(PC_Look_For,LC_WORK_WITH))
While LN_POS_FIND>0
If PB_Whole_Words
Calculate LB_BEFORE_OK as (LN_POS_FIND=1)|not(chk(upp(mid(LC_WORK_WITH,LN_POS_FIND-1,1)),'A','Z'))
Calculate LB_AFTER_OK as (LN_POS_FIND+len(PC_Look_For)>len(LC_WORK_WITH))|not(chk(upp(mid(LC_WORK_WITH,LN_POS_FIND+len(PC_Look_For),1)),'A','Z'))
Calculate #F as LB_BEFORE_OK&LB_AFTER_OK
Else
Calculate #F as kTrue
End If
If flag true
If PB_Match_Everytime
Calculate LC_RETURN as con(LC_RETURN,mid(LC_WORK_WITH,1,LN_POS_FIND-1))
Calculate LC_WORK_WITH as con(PC_Change_To,mid(LC_WORK_WITH,LN_POS_FIND+LN_Len_Look4,len(LC_WORK_WITH)))
Else
Calculate LC_RETURN as con(LC_RETURN,mid(LC_WORK_WITH,1,LN_POS_FIND-1),PC_Change_To)
Calculate LC_WORK_WITH as mid(LC_WORK_WITH,LN_POS_FIND+LN_Len_Look4,len(LC_WORK_WITH))
End If
Else
Calculate LC_RETURN as con(LC_RETURN,mid(LC_WORK_WITH,1,LN_POS_FIND))
Calculate LC_WORK_WITH as mid(LC_WORK_WITH,LN_POS_FIND+1,len(LC_WORK_WITH))
End If
Calculate LN_POS_FIND as pick(PB_Match_Case,pos(PC_Look_For,upp(LC_WORK_WITH)),pos(PC_Look_For,LC_WORK_WITH))
End While
Calculate PF_Field_to_check as con(LC_RETURN,LC_WORK_WITH)
Quit procedure
;
Local variable LB_AFTER_OK (Boolean)
Local variable LB_BEFORE_OK (Boolean)
;
Local variable LC_WORK_WITH (Character 10000000)
Local variable LC_RETURN (Character 10000000)
;
Local variable LN_Len_Look4 (Long integer) = 0
Local variable LN_POS_FIND (Long integer) = 0
Local variable LN_POS_ORIG (Long integer) = 0