Commit 2df6d05a9586e1405e9b5c37af03e2cf7102202f

Authored by Jean-Philippe Bernard
1 parent 08afb50c
Exists in master

First commit

Showing 1 changed file with 116 additions and 0 deletions   Show diff stats
src/idl_misc/idl_obsolete_for_Dustemwrap/str_sep.pro 0 → 100644
@@ -0,0 +1,116 @@ @@ -0,0 +1,116 @@
  1 +; $Id: //depot/Release/ENVI53_IDL85/idl/idldir/lib/obsolete/str_sep.pro#1 $
  2 +;
  3 +; Copyright (c) 1992-2015, Exelis Visual Information Solutions, Inc and
  4 +; CreaSo Creative Software Systems GmbH.
  5 +; All rights reserved. Unauthorized reproduction prohibited.
  6 +;+
  7 +; NAME:
  8 +; STR_SEP
  9 +;
  10 +; PURPOSE:
  11 +; This routine cuts a string into pieces which are separated by the
  12 +; separator string.
  13 +; CATEGORY:
  14 +; String processing.
  15 +; CALLING SEQUENCE:
  16 +; arr = STR_SEP(str, separator)
  17 +;
  18 +; INPUTS:
  19 +; str - The string to be separated.
  20 +; separator - The separator.
  21 +;
  22 +; KEYWORDS:
  23 +; ESC = escape character. Only valid if separator is a single character.
  24 +; Characters following the escape character are treated
  25 +; literally and not interpreted as separators.
  26 +; For example, if the separator is a comma,
  27 +; and the escape character is a backslash, the character
  28 +; sequence 'a\,b' is a single field containing the characters
  29 +; 'a,b'.
  30 +; REMOVE_ALL = if set, remove all blanks from fields.
  31 +; TRIM = if set, remove only leading and trailing blanks from fields.
  32 +;
  33 +; OUTPUT:
  34 +; An array of strings as function value.
  35 +;
  36 +; COMMON BLOCKS:
  37 +; None
  38 +;
  39 +; SIDE EFFECTS:
  40 +; No known side effects.
  41 +;
  42 +; RESTRICTIONS:
  43 +; None.
  44 +;
  45 +; EXAMPLE:
  46 +; array = STR_SEP ("ulib.usca.test", ".")
  47 +;
  48 +; MODIFICATION HISTORY:
  49 +; July 1992, AH, CreaSo Created.
  50 +; December, 1994, DMS, RSI Added TRIM and REMOVE_ALL.
  51 +;-
  52 +function STR_SEP, str, separator, REMOVE_ALL = remove_all, TRIM = trim, ESC=esc
  53 +
  54 +
  55 +ON_ERROR, 2
  56 +if n_params() ne 2 then message,'Wrong number of arguments.'
  57 +
  58 +spos = 0L
  59 +if n_elements(esc) gt 0 then begin ;Check for escape character?
  60 + if strpos(str, esc) lt 0 then goto, no_esc ;None in string, use fast case
  61 + besc = (byte(esc))[0]
  62 + bsep = (byte(separator))[0]
  63 + new = bytarr(strlen(str)+1)
  64 + new[0] = byte(str)
  65 + j = 0L
  66 + for i=0L, n_elements(new)-2 do begin
  67 + if new[i] eq besc then begin
  68 + new[j] = new[i+1]
  69 + i = i + 1
  70 + endif else if new[i] eq bsep then new[j] = 1b $ ;Change seps to 1b char
  71 + else new[j] = new[i]
  72 + j = j + 1
  73 + endfor
  74 + new = string(new[0:j-1])
  75 + w = where(byte(new) eq 1b, count) ;where seps are...
  76 + arr = strarr(count+1)
  77 + for i=0L, count-1 do begin
  78 + arr[i] = strmid(new, spos, w[i]-spos)
  79 + spos = w[i] + 1
  80 + endfor
  81 + arr[count] = strmid(new, spos, strlen(str)) ;Last element
  82 + goto, done
  83 + endif ;esc
  84 +
  85 +no_esc:
  86 +if strlen(separator) le 1 then begin ;Single character separator?
  87 + w = where(byte(str) eq (byte(separator))[0], count) ;where seps are...
  88 + arr = strarr(count+1)
  89 + for i=0, count-1 do begin
  90 + arr[i] = strmid(str, spos, w[i]-spos)
  91 + spos = w[i] + 1
  92 + endfor
  93 + arr[count] = strmid(str, spos, strlen(str)) ;Last element
  94 +endif else begin ;Multi character separator....
  95 + n = 0L ; Determine number of seperators in string.
  96 + repeat begin
  97 + pos = strpos (str, separator, spos)
  98 + spos = pos + strlen(separator)
  99 + n = n+1
  100 + endrep until pos eq -1
  101 +
  102 + arr = strarr(n) ; Create result array
  103 + spos = 0L
  104 + for i=0L, n-1 do begin ; Separate substrings
  105 + pos = strpos (str, separator, spos)
  106 + if pos ge 0 then arr[i] = strmid (str, spos, pos-spos) $
  107 + else arr[i] = strmid(str, spos, strlen(str))
  108 + spos = pos+strlen(separator)
  109 + endfor
  110 +endelse
  111 +
  112 +done:
  113 +if keyword_set(trim) then arr = strtrim(arr,2) $
  114 +else if keyword_set(remove_all) then arr = strcompress(arr, /REMOVE_ALL)
  115 +return, arr
  116 +end