CDF_ATTPUT ========== The CDF_ATTPUT procedure writes an attribute entry to a Common Data Format file, or attaches an attribute to a CDF variable. If the specified entry already exists, it is overwritten. Examples Example 1 Id= CDF_CREATE('foo', /SUN_ENCODING, /HOST_DECODING, $ /ROW_MAJOR) ; no dimensions. dummy= CDF_VARCREATE(id, 'Var1', /CDF_INT4, /REC_VARY) v2= CDF_VARCREATE(id, 'Var2', /CDF_FLOAT, /REC_NOVARY) dummy= CDF_ATTCREATE(id, 'Title', /VARIABLE) global_dummy = CDF_ATTCREATE(id,'Date',/GLOBAL) dummy= CDF_ATTCREATE(id, 'Att2', /VARIABLE) CDF_ATTPUT, id, 'Title', 'Var1', 'Temperature at surface' CDF_ATTPUT, id, 'Title', v2, 'Time of recording' CDF_ATTPUT, id, 'Date',1,'July 4, 1996' CDF_ATTPUT, id, 'Att2', 'Var2', FINDGEN(10) ; Rename the "Att2" attribute to "Attribute2": CDF_ATTRENAME, Id, 'Att2', 'Attribute2' ; Verify the attribute number (zero-based) of Attribute2 PRINT, CDF_ATTNUM(id, 'Attribute2') ; Close the CDF file. This file is used in the CDF_ATTGET example. CDF_CLOSE, id IDL Output See Additional Examples for more on using CDF_ATTPUT. Syntax CDF_ATTPUT, Id, Attribute, EntryNum, Value [, /CDF_EPOCH | /CDF_DATATYPE*] [, /ZVARIABLE] Arguments Id The CDF ID, returned from a previous call to CDF_OPEN or CDF_CREATE. Attribute A string containing either the name or number of the attribute to be written. EntryNum The entry number. If the attribute is variable in scope, this is either the name or number of the variable the attribute is to be associated with. If the attribute is global in scope, this is the actual gEntry. It is the user’s responsibility to keep track of valid gEntry numbers. Normally gEntry numbers will begin with 0 or 1 and will increase up to MAXGENTRY (as reported in the GET_ATTR_INFO structure returned by CDF_CONTROL), but this is not required. The EntryNum for the variable-scoped attribute must point to an existing variable. Value The value(s) to be written. Keywords CDF_EPOCH This keyword sets Value (of IDL's double type) to type CDF_EPOCH in the CDF file. If this keyword is not set, Value is set to type CDF_DOUBLE. Note: If the CDF_EPOCH keyword is set and the passed value is of IDL's int64 type, it is written as CDF_TIME_TT2000 data type. Without this keyword, the int64 value is written as CDF_INT8 data type. CDF_DATATYPE* This is a defined value indicated what the actual CDF data type the entry is written to. The defined value is one of the following: CDF_BYTE, CDF_CHAR, CDF_DOUBLE, CDF_EPOCH, CDF_FLOAT, CDF_INT1, CDF_INT2, CDF_INT4, CDF_INT8, CDF_LONG_EPOCH, CDF_REAL4, CDF_REAL8, CDF_TIME_TT2000, CDF_UCHAR, CDF_UINT1, CDF_UINT2, CDF_UINT4. To use this form, the entry Value has to have the matching IDL data type. Otherwise a mis-matched error could occur. This is a more specific way to write out the entry of the intended type to avoid the potential type mistake. The aforementioned CDF_EPOCH will still work, as specified. ZVARIABLE If EntryNum is a variable ID (as opposed to a variable name) and the variable is a zVariable, set this flag to indicate that the variable ID is a zVariable ID. The default is to assume that EntryNum is an rVariable ID. Note: the attribute must have a scope of VARIABLE_SCOPE. Additional Examples Example 2 The following example uses the Global attribute “MODS” to keep track of the modification history of a CDF file named mods.cdf. id = CDF_CREATE('mods.cdf', /CLOBBER) cid = CDF_ATTCREATE(id, 'MODS', /GLOBAL_SCOPE) CDF_ATTPUT, id, cid, 0, 'Original Version' CDF_CLOSE, id ; Next, reopen the CDF file and make modifications: id = CDF_OPEN('mods.cdf') CDF_CONTROL, id, ATTRIBUTE='MODS', GET_ATTR_INFO=ginfo ;Use CDF_CONTROL to get the MAXGENTRY used. CDF_ATTPUT, id, cid, ginfo.maxgentry+1,'Second Version' ;Insert the new gEntry at MAXGENTRY+1. CDF_CLOSE, id ; Reopen the CDF file again and make more modifications: id = CDF_OPEN('mods.cdf') CDF_CONTROL, id, ATTRIBUTE='MODS', GET_ATTR_INFO=ginfo CDF_ATTPUT, id, cid, ginfo.maxgentry+1, 'Third Version' CDF_CLOSE, id ;Reopen the CDF file again and make a modification in the ;MAXGENTRY + 2 spot (skipping an entry number). id = CDF_OPEN('mods.cdf') CDF_CONTROL, id, ATTRIBUTE='MODS', GET_ATTR_INFO=ginfo CDF_ATTPUT, id, cid, ginfo.maxgentry+2, 'Fourth Version' ; Now, examine the CDF file to review its modification history. ; Since the gENTRY numbers have a gap in them, we can check each ; attribute with the CDF_ATTEXISTS function. This is a good idea ; if you do not know for certain that the attribute entries are ; serially numbered. CDF_CONTROL, id, ATTRIBUTE='MODS', GET_ATTR_INFO=ginfo FOR I=0, ginfo.maxgentry DO BEGIN IF CDF_ATTEXISTS(id, cid, I) THEN BEGIN CDF_ATTGET, id, cid, I, gatt PRINT, I, gatt, FORMAT='("Attribute: MODS (gENTRY #",i1,") = ",A)' ENDIF ELSE BEGIN PRINT, I, FORMAT='("Attribute: MODS (gENTRY #",i1,") $ Does not exist")' ENDELSE ENDFOR CDF_CLOSE, id IDL Output Attribute: MODS (gENTRY #0) = Original Version Attribute: MODS (gENTRY #1) = Second Version Attribute: MODS (gENTRY #2) = Third Version Attribute: MODS (gENTRY #3) Does not exist Attribute: MODS (gENTRY #4) = Fourth Version Version History Pre 4.0 Introduced © 2015 Exelis Visual Information Solutions, Inc., a subsidiary of Harris Corporation. All Rights Reserved. This information is not subject to the controls of the International Traffic in Arms Regulations (ITAR) or the Export Administration Regulations (EAR). However, this information may be restricted from transfer to various embargoed countries under U.S. laws and regulations.