Viewing contents of file '../idllib/jhuapls1r/usr/convert_ind.pro'
;-------------------------------------------------------------
;+
; NAME:
; CONVERT_IND
; PURPOSE:
; Convert a text description of runs of indices to numbers.
; CATEGORY:
; CALLING SEQUENCE:
; ind = convert_ind(txt)
; INPUTS:
; txt = text string or array. in
; KEYWORD PARAMETERS:
; OUTPUTS:
; ind = long array of indices. out
; COMMON BLOCKS:
; NOTES:
; Notes: txt contains a list of integers. A range may
; be indicated by the syntax b:e where b = beginning,
; and e = end of the range. A step, s, may also be
; given: b:e:s. An example list might be:
; txt=['2,3,4,10:20:2,25:30','34,35,38:40','50:100:10,111']
; print,convert_ind(txt) gives:
; 2 3 4 10 12 14 16 18 20 25 26 27 28 29 30
; 34 35 38 39 40 50 60 70 80 90 100 111
; Inverse of LISTRUNS.PRO.
; MODIFICATION HISTORY:
; R. Sterner, 24 Jul, 1991
;
; Copyright (C) 1991, 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 convert_ind, txt0, help=hlp
if (n_params(0) lt 1) or keyword_set(hlp) then begin
print,' Convert a text description of runs of indices to numbers.'
print,' ind = convert_ind(txt)'
print,' txt = text string or array. in'
print,' ind = long array of indices. out'
print,' Notes: txt contains a list of integers. A range may'
print,' be indicated by the syntax b:e where b = beginning,'
print,' and e = end of the range. A step, s, may also be'
print,' given: b:e:s. An example list might be:'
print," txt=['2,3,4,10:20:2,25:30','34,35,38:40','50:100:10,111']"
print,' print,convert_ind(txt) gives:'
print,' 2 3 4 10 12 14 16 18 20 25 26 27 28 29 30'
print,' 34 35 38 39 40 50 60 70 80 90 100 111'
print,' Inverse of LISTRUNS.PRO.'
return, ''
endif
;-------- Replace all commas with spaces ------
txt = repchr(txt0,',') ; Commas.
;-------- Split into single items -------------
wordarray, txt, w
;-------- Loop through items converting to indices ------
ind = [0L] ; Get array started.
for i = 0, n_elements(w)-1 do begin
t1 = getwrd(w(i),0, delim=':') ; Get 1st value.
t2 = getwrd('',1) ; Get 2nd value.
t3 = getwrd('',2) ; Get 3rd value.
t1 = t1 + 0L ; Convert to numbers.
if t2 eq '' then t2 = t1 else t2 = t2 + 0L ; Def = t1.
if t3 eq '' then begin ; t3 is NULL, set def.
if (t2+0) lt (t1+0) then begin ; Step backward?
t3 = -1 ; Yes.
endif else begin
t3 = 1 ; No.
endelse
endif else begin
t3 = t3 + 0L ; t3 is given.
endelse
ind = [ind, makei(t1,t2,t3)] ; Add indices.
endfor
ind = ind(1:*) ; Trim off first value.
return, ind
end