table of contents
rheostream(2rheolef) | rheolef-6.1 | rheostream(2rheolef) |
NAME¶
irheostream, orheostream - large data streamsABSTRACT¶
This class provides a stream interface for large
data management.
File decompresion is assumed using
gzip and a recursive seach in a directory list
is provided for input.
orheostream foo("NAME", "suffix");is like
ofstream foo("NAME.suffix").However, if NAME does not end with `.suffix', then
` .suffix' is added, and compression
is done with gzip, adding an additional ` .gz' suffix.
Conversely,
irheostream foo("NAME","suffix");is like
ifstream foo("NAME.suffix").However, we look at a search path environment variable
RHEOPATH in order to find NAME while suffix is assumed.
Moreover, gzip compressed files, ending
with the ` .gz' suffix is assumed, and decompression is done.
Finally, a set of useful functions are provided.
DESCRIPTION¶
The following code:
irheostream is("results", "data");will recursively look for a ` results[.data[.gz]]' file in the
directory mentionned by the RHEOPATH environment variable.
For instance, if you insert in our ".cshrc" something like:
setenv RHEOPATH ".:/home/dupont:/usr/local/math/demo"the process will study the current directory ` .', then, if
neither ` square.data.gz' nor `square.data' exits, it scan
all subdirectory of the current directory. Then, if file
is not founded, it start recusively in ` /home/dupond'
and then in ` /usr/local/math/demo'.
File decompression is performed by using
the gzip command, and data are pipe-lined
directly in memory.
If the file start with ` .' as `./square' or with a `/'
as ` /home/oscar/square', no search occurs and RHEOPATH
environment variable is not used.
Also, if the environment variable RHEOPATH is not set, the
default value is the current directory ` .'.
For output stream:
orheostream os("newresults", "data");file compression is assumed, and "newresults.data.gz"
will be created.
File loading and storing are mentionned by a message,
either:
! load "./results.data.gz"or:
! file "./newresults.data.gz" created.on the clog stream.
By adding the following:
clog << noverbose;you turn off these messages
(see iorheo(4)).
IMPLEMENTATION¶
class irheostream : public io::filtering_stream<io::input> { public: irheostream() : io::filtering_stream<io::input>() {} irheostream(const std::string& name, const std::string& suffix = std::string()); virtual ~irheostream(); void open (const std::string& name, const std::string& suffix = std::string()); void close(); protected: std::ifstream _ifs; }; class orheostream : public io::filtering_stream<io::output> { public: orheostream() : io::filtering_stream<io::output>() {} orheostream(const std::string& name, const std::string& suffix = std::string()); virtual ~orheostream(); void open (const std::string& name, const std::string& suffix = std::string()); void close(); protected: std::ofstream _ofs; }; std::string itos (std::string::size_type i); std::string ftos (const Float& x); // catch first occurence of string in file bool scatch (std::istream& in, const std::string& ch); // has_suffix("toto.suffix", "suffix") -> true bool has_suffix (const std::string& name, const std::string& suffix); // "toto.suffix" --> "toto" std::string delete_suffix (const std::string& name, const std::string& suffix); // "/usr/local/dir/toto.suffix" --> "toto.suffix" std::string get_basename (const std::string& name); // "/usr/local/dir/toto.suffix" --> "/usr/local/dir" std::string get_dirname (const std::string& name); // "toto" --> "/usr/local/math/data/toto.suffix" std::string get_full_name_from_rheo_path (const std::string& rootname, const std::string& suffix); // "." + "../geodir" --> ".:../geodir" void append_dir_to_rheo_path (const std::string& dir); // "../geodir" + "." --> "../geodir:." void prepend_dir_to_rheo_path (const std::string& dir); bool file_exists (const std::string& filename); // string to float bool is_float (const std::string&); Float to_float (const std::string&); // in TMPDIR environment variable or "/tmp" by default std::string get_tmpdir();
SEE ALSO¶
iorheo(4)rheolef-6.1 | rheolef-6.1 |