我是靠谱客的博主 发嗲大树,这篇文章主要介绍IDL中一个好用的字符串替换的函数replace_string,现在分享给大家,希望可以做个参考。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
; ; 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中一个好用内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部