[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: string manipulation



Craig Markwardt wrote:
> 
> I have been thinking about the following problem, but have been pretty
> frustrated.
> 
> I have input keyword/value strings of the following form.  People may
> recognize this from a FITS file.
> 
> TTYPE2  = 'X1LSpecPcu0'        / X1LSpecPcu0 : Histogram
> TUNIT2  = 'count   '
> 1CTYP2  = 'CHANNEL '
> 1CPIX2  = '0~4,5:53,(54~135;2),(136~237;3),(238~249;4),250~255'
> 12CD2A  = 1.25
> ^name^^   ^value^^^^^^^
> 
> All of the keyword names have a trailing "2" which indicates that they
> are describing column number 2 in a FITS table.  Note that in the name
> "12CD2A", only the *final* 2 refers to the column number.
> 
> The interesting question happens when I want to change the column
> number, say from "2" to "50".  Is there a straightforward way to do
> this in "vectoral" sort of way?
> 
> I am able to find the string positions of the 2's, so that's not
> really a problem.  I do this by making a byte array of the strings,
> and blanking out any alphabetic characters and any leading numeric
> characters.  Here I appreciate STRPOS is (partially) vectorized.
> 
> However, when it comes to resubstituting the "50" back in, that's when
> I get stymied.  This is primarily because STRMID and STRPUT are not
> vectorized at all.  Well STRMID *is* vectorized, but not with a sane
> behavior.  For example, what I'd like to do is:
> 
> NEWKEY = STRMID(KEY,0,P1) + '50' + STRMID(KEY,P2,100)
> 
> Where KEY, P1, and P2 are vectors.  Obviously this doesn't work.  Any
> ideas?

I was going to come up with something using histogram, but I figured I'd
be pressing my luck.  I would probably use a loop and the
sx{add,del,}par.pro routines from the nasalib.  FITS has lots of rules
about keyword length, total line length, etc.  Best to waste some cycles
and make sure it's done right.

Good luck,

JD