/usr/share/gnudatalanguage/astrolib/gettok.pro is in gdl-astrolib 2018.02.16+dfsg-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 | function gettok,st,char, exact=exact, notrim=notrim
;+
; NAME:
; GETTOK
; PURPOSE:
; Retrieve the first part of a (vector) string up to a specified character
; EXPLANATION:
; GET TOKen - Retrieve first part of string until the character char
; is encountered.
;
; CALLING SEQUENCE:
; token = gettok( st, char, [ /EXACT, /NOTRIM ] )
;
; INPUT:
; char - character separating tokens, scalar string
;
; INPUT-OUTPUT:
; st - string to get token from (on output token is removed unless
; /NOTRIM is set), scalar or vector
;
; OUTPUT:
; token - extracted string value is returned, same dimensions as st
; OPTIONAL INPUT KEYWORD:
; /EXACT - The default behaviour of GETTOK is to remove any leading
; blanks and (if the token is a blank) convert tabs to blanks.
; Set the /EXACT keyword to skip these steps and leave the
; input string unchanged before searching for the character
; tokens.
;
; /NOTRIM - if set, then the input string is left unaltered
; EXAMPLE:
; If ST is ['abc=999','x=3.4234'] then gettok(ST,'=') would return
; ['abc','x'] and ST would be left as ['999','3.4234']
;
; PROCEDURE CALLS:
; REPCHR()
; HISTORY
; version 1 by D. Lindler APR,86
; Remove leading blanks W. Landsman (from JKF) Aug. 1991
; V5.3 version, accept vector input W. Landsman February 2000
; Slightly faster implementation W. Landsman February 2001
; Added EXACT keyword W. Landsman March 2004
; Assume since V5.4, Use COMPLEMENT keyword to WHERE W. Landsman Apr 2006
; Added NOTRIM keyword W. L. March 2011
;-
;----------------------------------------------------------------------
On_error,2 ;Return to caller
compile_opt idl2
if N_params() LT 2 then begin
print,'Syntax - token = gettok( st, char, [ /EXACT, /NOTRIM] )'
return,-1
endif
; if char is a blank treat tabs as blanks
if ~keyword_set(exact) then begin
st = strtrim(st,1) ;Remove leading blanks and tabs
if char EQ ' ' then begin
tab = string(9b)
if max(strpos(st,tab)) GE 0 then st = repchr(st,tab,' ')
endif
endif
token = st
; find character in string
pos = strpos(st,char)
test = pos EQ -1
bad = where(test, Nbad, Complement = good, Ncomplement=Ngood)
if Nbad GT 0 && ~keyword_set(notrim) then st[bad] = ''
; extract token
if Ngood GT 0 then begin
stg = st[good]
pos = reform( pos[good], 1, Ngood )
token[good] = strmid(stg,0,pos)
if ~keyword_set(notrim) then st[good] = strmid(stg,pos+1)
endif
; Return the result.
return,token
end
|