;------------------------------------------------------------- ;+ ; NAME: ; STREP ; PURPOSE: ; Edit a string by position. Precede, Follow, Replace, Delete. ; CATEGORY: ; CALLING SEQUENCE: ; newstring = strep(string,cmd,p,ss,[iflg]) ; INPUTS: ; string = string to edit. in ; cmd = edit command: in ; 'P' = precede position p with substring ss. ; 'F' = follow position p with substring ss. ; 'R' = replace text starting at position p ; with text from substring ss. ; 'D' = delete N characters starting at ; position p. The calling sequence for ; this command is slightly different: ; IFLG = STREP(string,'D',p,n,[iflg]) ; Where n = number of characters to delete. ; p = character position to use. in ; 0 = first char. Any number larger ; than the string length = last char. ; ss = substring to use. For 'D' command in ; n is used instead of ss. ; KEYWORD PARAMETERS: ; OUTPUTS: ; iflg = 0 for a successful edit, out ; iflg = -1 for an error and no change to string. ; newstring = edited string. out ; COMMON BLOCKS: ; NOTES: ; MODIFICATION HISTORY: ; Written by R. Sterner, 27 Dec, 1984. ; Converted to SUN 13 Aug, 1989 --- R. Sterner. ; R. Sterner, 2010 Apr 29 --- Converted arrays from () to []. ; R. Sterner, 2010 Dec 20 --- Fixed 'P', 'F', and 'R' for ss=NULL string. ; Null string was terminating the string where inserted (since 1984). ; ; Copyright (C) 1984, Johns Hopkins University/Applied Physics Laboratory ; This software may be used, copied, or redistributed as long as it is not ; sold and this copyright notice is reproduced on each copy made. This ; routine is provided as is without any express or implied warranties ; whatsoever. Other limitations apply as described in the file disclaimer.txt. ;- ;------------------------------------------------------------- function strep,s,cmd,ip,ss,iflg, help=hlp if (n_params(0) lt 4) or keyword_set(hlp) then begin print,' Edit a string by position. Precede, Follow, Replace, Delete.' print,' newstring = strep(string,cmd,p,ss,[iflg])' print,' string = string to edit. in' print,' cmd = edit command: in' print," 'P' = precede position p with substring ss." print," 'F' = follow position p with substring ss." print," 'R' = replace text starting at position p" print,' with text from substring ss.' print," 'D' = delete N characters starting at" print,' position p. The calling sequence for' print,' this command is slightly different:' print," IFLG = STREP(string,'D',p,n,[iflg])" print,' Where n = number of characters to delete.' print,' p = character position to use. in' print,' 0 = first char. Any number larger' print,' than the string length = last char.' print," ss = substring to use. For 'D' command in" print,' n is used instead of ss.' print,' iflg = 0 for a successful edit, out' print,' iflg = -1 for an error and no change to string.' print,' newstring = edited string. out' return, -1 endif N = STRLEN(S) - 1 IF N LT 0 THEN $ IF CMD EQ 'D' THEN RETURN, '' ELSE RETURN, SS P = IP>0<N BS = BYTE(S) IF (CMD NE 'D') THEN BSS = BYTE(SS) JFLG = 0 CASE CMD OF 'P': BEGIN if ss ne '' then begin ; Ignore NULL string. IF P EQ 0 THEN T = [BSS,BS] ELSE T = [BS[0:P-1],BSS,BS[P:*]] endif else t=bs END 'F': BEGIN if ss ne '' then begin ; Ignore NULL string. IF P EQ N THEN BEGIN T = [BS,BSS] ENDIF ELSE BEGIN IF IP GE 0 THEN BEGIN T = [BS[0:P],BSS,BS[P+1:*]] ENDIF ELSE BEGIN T = [BSS, BS] ENDELSE ENDELSE endif else t=bs END 'R': BEGIN NSS = STRLEN(SS) IF NSS GT N - P + 1 THEN $ T = [BS[0:P-1],BSS] $ ELSE BEGIN $ T = BS if ss ne '' then T[P]=BSS ENDELSE END 'D': BEGIN ND = SS < (N + 1) IF P EQ 0 THEN $ IF ND EQ N+1 THEN T = '' ELSE $ T = [BS[ND:*]] IF P GT 0 THEN $ IF ND+P-1 GE N THEN $ T = [BS[0:P-1]] ELSE $ T = [BS[0:P-1],BS[ND+P:*]] END ELSE: JFLG = -1 ENDCASE IF JFLG NE 0 THEN T = S IF JFLG EQ 0 THEN T = STRING(T) IF N_PARAMS(0) EQ 5 THEN IFLG = JFLG RETURN,T END