概述
;
; Copyright (c) 1998, Forschungszentrum Juelich GmbH ICG-1
; All rights reserved.
; Unauthorized reproduction prohibited.
; 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.
;
;+
; NAME:
;
replace_string
;
; PURPOSE:
;
This function replaces in a given string or vector of strings all values by an other. Length or only one char didn't matter.
;
It could also be used to delete a substring from a string.
;
; CATEGORY:
;
PROG_TOOLS/STRINGS
;
; CALLING SEQUENCE:
;
Result=replace_string(text,in_string,rep_string,[no_of_replaces=no_of_replaces],[pos=pos],[count=count])
;
; INPUTS:
;
text:
the text where to replace some informations
;
in_string:
the search string
;
rep_string: the string which should replace in_string
;
; KEYWORD PARAMETERS:
;
no_of_replace: if set two a number, this means in text as many times of no_of_replace in_string is reaplced by rep_string
;
pos:
if set to a number the replacement starts at this string position
;
count:
this argument returns the number of replaces
;
; OUTPUTS:
;
Result is the new text
;
; EXAMPLE:
;
help,replace_string('Dies ist ein Test',' ','_')
;
<Expression>
STRING
= 'Dies_ist_ein_Test'
;
help,replace_string('Dies ist ein Test',' ','_',pos=5)
;
<Expression>
STRING
= 'Dies ist_ein_Test'
;
help,replace_string('Dies ist ein Test',' ','_',pos=5,no=1)
;
<Expression>
STRING
= 'Dies ist_ein Test'
;
help,replace_string('Dies ist ein Test','ist','ist')
;
<Expression>
STRING
= 'Dies ist ein Test'
;
help,replace_string('Dies ist ein Test, ist ein','ist','ist nicht')
;
<Expression>
STRING
= 'Dies ist nicht ein Test, ist nicht ein'
;
help,replace_string('\\\\','','/')
;
<Expression>
STRING
= '/'
;
help,replace_string('["..idl_htmlidl_work_cat.htm"]','cat','cat_org')
;
<Expression>
STRING
= '["..idl_htmlidl_work_cat_org.htm"]'
;
print,replace_string(['12:33:00','12:33:00','12:33:00'],':',')
;
123300 123300 123300
;
print,replace_string(['12:33:00','12:33:00','12:33:00'],':',',pos=5)
;
12:3300 12:3300 12:3300
;
print,replace_string( 'asdf___ertz_j','__', ')
;
asdf_ertz_j
;
print,replace_string(['12:33:00','12:33:00','12:33:00'],':',',pos=5,count=c),c
;
12:3300 12:3300 12:3300
;
3
;
print,replace_string(['12:33:00','12:33:00','12:33:00'],':',',count=c),c
;
123300 123300 123300
;
6
;
;
; MODIFICATION HISTORY:
;
Written by: R.Bauer (ICG-1) , 1998-Sep-06
;
1998-09-26 bug removed with start_pos and a vector of strings
;
1998-09-26 special replacement include if a sign should be replaced by an other by n times
;
1999-09-07 bug removed with replacing '___' by '_'
;
1999-10-01 count added
;
2000-03-08 bug with no_of_replaces removed
;
if text is an array no_of_replaces is used for each element
;
2001-02-13 Loop in LONG
;
2004-06-03 added a test if submitted parameters have values
;-
FUNCTION replace_string,text,in_string,rep_string,pos=pos,no_of_replaces=no_of_replaces,count=count_n_replace
IF N_PARAMS() LT 3 THEN BEGIN
;
MESSAGE,call_help(),/cont
RETURN,'
ENDIF
If n_elements(text) eq 0 or n_elements(in_string) eq 0 or n_elements(rep_string) eq 0 then begin
MESSAGE,/cont, 'problem by passig parameters, please check the input data variables'
RETURN,'
endif
counter=0
count_n_replace=0
IF N_ELEMENTS(no_of_replaces) GT 0 THEN number=no_of_replaces ELSE number=1E+30
length_in_string=STRLEN(in_string)
length_rep_string=STRLEN(rep_string)
; Sonderfall, wenn genau 1 Zeichen der Lanege 1 durch 1 anderes Zeichen der Laenge 1 und n mal ersetzt werden soll
; Dieses Verfahren ist einfach schneller
IF length_rep_string NE 0 THEN BEGIN
IF length_in_string + length_rep_string EQ 2 AND number EQ 1E+30 THEN BEGIN
new_text=BYTE(text)
IF N_ELEMENTS(pos) EQ 0 THEN BEGIN
change=WHERE(new_text EQ ((BYTE(in_string))[0]),count_change)
IF count_change GT 0 THEN new_text[change]=(BYTE(rep_string))[0]
ENDIF ELSE BEGIN
change=WHERE(new_text[pos:*] EQ ((BYTE(in_string))[0]),count_change)
IF count_change GT 0 THEN new_text[pos+change]=(BYTE(rep_string))[0]
ENDELSE
count_n_replace=count_change
RETURN,STRING(new_text)
ENDIF
ENDIF
; alle anderen Faelle werden so behandelt
IF N_ELEMENTS(pos) EQ 0 THEN start_pos=0 ELSE start_pos=pos
n_text=N_ELEMENTS(text)-1
FOR i=0L,n_text DO BEGIN
counter=0
new_text=text[i]
IF STRPOS(new_text,in_string) NE -1 AND in_string NE rep_string THEN
BEGIN
pos_in_string=1
text_length=STRLEN(new_text)
WHILE pos_in_string NE -1 AND counter LT number DO BEGIN
pos_in_string=STRPOS(new_text,in_string,start_pos)
IF pos_in_string GT -1 THEN BEGIN
count_n_replace=count_n_replace+1
new_text=STRMID(new_text,0,pos_in_string)+rep_string+STRMID(new_text,pos_in_string+length_in_string,text_length)
start_pos=pos_in_string+length_rep_string
ENDIF
counter=counter+1
ENDWHILE
if n_elements(result) eq 0 then result=new_text else result=[result,new_text]
IF N_ELEMENTS(pos) EQ 0 THEN start_pos=0 ELSE start_pos=pos
ENDIF ELSE BEGIN
if n_elements(result) eq 0 then result=new_text else result=[result,new_text]
IF N_ELEMENTS(pos) EQ 0 THEN start_pos=0 ELSE start_pos=pos
ENDELSE
ENDFOR
RETURN,result
END
最后
以上就是发嗲大树为你收集整理的IDL中一个好用的字符串替换的函数replace_string的全部内容,希望文章能够帮你解决IDL中一个好用的字符串替换的函数replace_string所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复