repstr.pro

来自「basic median filter simulation」· PRO 代码 · 共 80 行

PRO
80
字号
function repstr,obj,in,out;+; NAME:;	REPSTR; PURPOSE:;	Replace all occurences of one substring by another.; EXPLANATION:;	Meant to emulate the string substitution capabilities of text editors;;       For a more sophisticated routine that allows regular expressions look;       at STR_REPLACE()  http://www.ittvis.com/codebank/search.asp?FID=311; CALLING SEQUENCE:;	result = repstr( obj, in, out );; INPUT PARAMETERS:;	obj    = object string for editing, scalar or array;	in     = substring of 'obj' to be replaced, scalar ;; OPTIONAL INPUT PARMETER:;	out    = what 'in' is replaced with, scalar.   If not supplied;		then out = '', i.e. 'in' is not replaced by anything. ;; OUTPUT PARAMETERS:;	Result returned as function value.  Input object string;	not changed unless assignment done in calling program.;; PROCEDURE:;	Searches for 'in', splits 'obj' into 3 pieces, reassembles;	with 'out' in place of 'in'.  Repeats until all cases done.;; EXAMPLE:;	If a = 'I am what I am' then print,repstr(a,'am','was');	will give 'I was what I was'.;; MODIFICATION HISTORY:;	Written by Robert S. Hill, ST Systems Corp., 12 April 1989.;	Accept vector object strings, W. Landsman   HSTX,   April, 1996;	Converted to IDL V5.0   W. Landsman   September 1997;       Convert loop to LONG, vectorize STRLEN call W. Landsman June 2002;       Correct bug in optimization, case where STRLEN(OBJ) EQ;         STRLEN(IN), C. Markwardt, Jan 2003;       Fixed problem when multiple replacements extend the string length;                 D. Finkbeiner, W. Landsman  April 2003;       Allow third parameter to be optional again W. Landsman  August 2003;       Remove limitation of 9999 characters, C. Markwardt Dec 2003;- On_error,2 compile_opt idl2  if N_params() LT 2 then begin	print,'Syntax - result = REPSTR( obj, in, out )'	return, obj endif if N_elements(out) EQ 0 then out = '' l1 = strlen(in) l2 = strlen(out) diflen = l2- l1 Nstring = N_elements(obj) object = obj lo = strlen(object) - l1             ;Last character needed to look at  for i= 0L ,Nstring-1 do begin last_pos = 0 pos = 0 while ( pos LE lo[i]) and (pos GE 0) do begin   pos = strpos(object[i],in,last_pos)   if (pos GE 0) then begin	      first_part = strmid(object[i],0,pos)	      last_part  = strmid(object[i],pos+l1)	      object[i] = first_part + out + last_part   endif   last_pos = pos + l2  lo[i] = lo[i] + diflen           ;Length of string may have changed endwhile endfor return,object end

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?