The expression syntax for the conditions that may be applied to table data are described in the cfitsio manual. In the example below, we illustrate filtering with a boolean expression involving one of the columns.
The two flags at the end of the call to FITS::filter are an `overwrite' flag - which only has meaning if the inFile and outFile are the same, and a 'read' flag. overwrite defaults to true. The second flag is a 'read' flag which defaults to false. When set true the user has immediate access to the filtered data.
int selectRows()
{
const string inFile("atestfil.fit");
const string outFile("btestfil.fit");
const string newFile("ctestfil.fit");
remove(newFile.c_str());
// test 1: write to a new file
std::auto_ptr<FITS> pInfile(new FITS(inFile,Write,string("PLANETS_ASCII")));
FITS* infile(pInfile.get());
std::auto_ptr<FITS> pNewfile(new FITS(newFile,Write));
ExtHDU& source = infile->extension("PLANETS_ASCII");
const string expression("DENSITY > 3.0");
Table& sink1 = pNewfile->filter(expression,source,false,true);
std::cout << sink1 << std::endl;
// test 2: write a new HDU to the current file, overwrite false, read true.
// AS OF 7/2/01 does not work because of a bug in cfitsio, but does not
// crash, simply writes a new header to the file without also writing the
// selected data.
Table& sink2 = infile->filter(expression,source,false,true);
std::cout << sink2 << std::endl;
// reset the source file back to the extension in question.
source = infile->extension("PLANETS_ASCII");
// test 3: overwrite the current HDU with filtered data.
Table& sink3 = infile->filter(expression,source,true,true);
std::cout << sink3 << std::endl;
return 0;
}
1.2.7 written by Dimitri van Heesch,
© 1997-2001