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));