;------------------------------------------------------------- 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 P EQ 0 THEN T = [BSS,BS] ELSE $ T = [BS(0:P-1),BSS,BS(P:*)] END 'F': BEGIN 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 END 'R': BEGIN NSS = STRLEN(SS) IF NSS GT N - P + 1 THEN $ T = [BS(0:P-1),BSS] $ ELSE BEGIN $ T = BS 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 ;-------------------------------------------------------------