This macro (in the DeclareData MODULE structure attribute) demonstrates one technique to list the component sub-files of a SuperFile:
IMPORT STD;
EXPORT MAC_ListSFsubfiles(SuperFile) := MACRO
#UNIQUENAME(SeedRec)
%SeedRec% := DATASET([{''}], {STRING name});
#UNIQUENAME(Xform)
TYPEOF(%SeedRec%) %Xform%(%SeedRec% L, INTEGER C) :=
TRANSFORM
SELF.name :=
Std.File.GetSuperFileSubName(SuperFile,C);
END;
OUTPUT(NORMALIZE(%SeedRec%,
Std.File.GetSuperFileSubCount(SuperFile),
%Xform%(LEFT,COUNTER)));
ENDMACRO;
The interesting technique here is the use of NORMALIZE to call the TRANSFORM function iteratively until all sub-files in the SuperFile are listed. You can call this macro in a builder window like this (this code is contained in SuperFile7.ECL):
IMPORT $; IMPORT Std; $.DeclareData.MAC_ListSFsubfiles($.DeclareData.AllPeople);
This will return a list of all the sub-files in the specified SuperFile. However, this type of code is no longer necessary, since the default mode of the SuperFileContents() function now returns exactly the same result, like this:
IMPORT $; IMPORT Std; OUTPUT(Std.File.SuperFileContents($.DeclareData.AllPeople));
The SuperFileContents() function has an advantage over the macro--it has an option to return the sub-files from any nested SuperFile (which the macro can't do). That form looks like this:
IMPORT $; IMPORT Std; OUTPUT(Std.File.SuperFileContents($.DeclareData.AllPeople,TRUE));