Re: idlastro mrdfits and strings [message #68614 is a reply to message #68608] |
Thu, 12 November 2009 09:40  |
wlandsman
Messages: 743 Registered: June 2000
|
Senior Member |
|
|
On Nov 11, 3:58 pm, Chris Thom <christ...@gmail.com> wrote:
> I'm not sure if these tags are being padded in the write or the read
> phase, but it'd be nice if there was a way to trim these tags on read.
> Or is there some reason this is a bad idea?
The tags are being padded in the write. The problem is related to
one I discussed earlier
http://groups.google.com/group/comp.lang.idl-pvwave/browse_f rm/thread/95e19b78119ab265/41b6775e8ae24ffe
where IDL does not include a terminating null byte for the string tags
when writing a structure to disk. So to do this correctly, one has
to convert the string tags in a structure to bytes, which means
creating an entirely new structure (since one can't change data types
of a structure element), greatly slowing things down and complicating
the code. It is a fix that I should do sometime, but I am not in a
hurry to do so. (But I will document this bug/feature better.)
> The work-around (sprinkling strtrim()s throughout the code) is
> functional if a little ugly.
If you are sure that you don't care about leading/trailing spaces, you
could apply the following function right after the call to mrdfits()
function trimstruct,str
; Trim each string element of a structure, assume there are not
substructures
N= N_tags(str)
for i=0,n-1 do $
if size(str.(i),/tname) EQ 'STRING' then str.(i) = strtrim(str.(i),
2)
return
end
(Actually, it would be nice if one could apply strtrim() directly to a
structure to do this.) --Wayne
|
|
|