idlastro / IDL Structure procedures: COMPARE_STRUCT

[Source code]

NAME
COMPARE_STRUCT  
PURPOSE
Compare all matching tag names and return differences
EXPLANATION
Compare all matching Tags names (except for "except_Tags")
between two structure arrays (may have different struct.definitions),
and return a structured List of fields found different.
CALLING SEQUENCE
diff_List = compare_struct( struct_A, struct_B [ EXCEPT=, /BRIEF,
                                                         /FULL, /NaN, /RECUR_A, /RECUR_B )
INPUTS
struct_A, struct_B : the two structure arrays to compare.
Struct_Name : for internal recursion use only.
OPTIONAL INPUT KEYWORDS
EXCEPT = string array of Tag names to ignore (NOT to compare).
/BRIEF = number of differences found for each matching field
                                                                of two structures is printed.
/FULL = option to print even if zero differences found.
/NaN = if set, then tag values are considered equal if they
           are both set to NaN 
/RECUR_A = option to search for Tag names
                                in sub-structures of struct_A,
                                and then call compare_struct recursively
                                for those nested sub-structures.
/RECUR_B = search for sub-structures of struct_B,
                                and then call compare_struct recursively
                                for those nested sub-structures.

compare_struct is automatically called recursively
for those nested sub-structures in both struct_A and struct_B
(otherwise cannot take difference)
OUTPUT
Returns a structure array describing differences found.   
which can be examined using print,diff_List or help,/st,diff_List.
The tags are
TAG_NUM_A - the tag number in structure A
TAG_NUM_B - the tag number in structure B
FIELD - the tag name
NDIFF - number of differences (always 1 for a scalar tag).
PROCEDURE
Match Tag names and then use where function on tags.
EXAMPLE
Find the tags in the !X system variable which are changed after a 
simple plot.
IDL> x = !X                              ;Save original values
IDL> plot, indgen(25)    ;Make a simple plot
IDL> print,compare_struct(x,!X)    ;See how structure has changed
        and one will see that the tags !X.crange, !X.S, !X.WINDOW and !X.CRANGE are 
        changed
         by the plot.
MODIFICATION HISTORY
written 1990 Frank Varosi STX @ NASA/GSFC (using copy_struct)
modif Aug.90 by F.V. to check and compare same # of elements only.
Added /NaN keyword W. Landsman  March 2004
Don't test string for NaN values W. Landsman March 2008
Don't test object for NaN values W. Landsman Sep 2017
Now returns an empty list when comparing equal hashes or lists
          W. Landsman  October 2017
NaN keyword passed in recursive calls  W. Landsman/R. Colomina Jan 2018