Example 1. This simple program creates a new file and writes a string to it.
#include <pstreams.h> USING_PTYPES int main() { // the outfile object is declared and constructed outside // the try...catch clause, since the exception object // contains a reference to the stream that caused the error. // besides, stream constructors and destructors in PTypes // never throw exceptions. outfile f(fname); f.set_bufsize(1024); // the default value in this version is 8192 try { f.open(); f.put("This is a test file."); f.close(); } catch (estream* e) { perr.putf("File error: %s\n", e->get_message()); delete e; } return 0; }
Example 2. This program reads a C source, extracts identifiers and builds a usage dictionary. It does not understand C comments and string literals though, but can be easily improved to understand them too.
#include <ptypes.h> #include <pstreams.h> USING_PTYPES const cset letters("_A-Za-z"); const cset digits("0-9"); const cset identchars = letters + digits; const cset otherchars = !letters; void main(int argc, char* argv[]) { tstrlist<void*> dic(SL_SORTED | SL_CASESENS); infile f(argv[1]); try { f.open(); while (!f.get_eof()) { char c = f.preview(); // a C identifier begins with a letter if (c & letters) { // ... and may contain letters and digits string ident = f.token(identchars); int i; if (!dic.search(ident, i)) dic.ins(i, ident, 0); } else // ignore everything else f.skiptoken(otherchars); } } catch (estream* e) { pout.putf("Error: %s\n", e->get_message()); delete e; } // now print the dictionary for (int i = 0; i < dic.get_count(); i++) pout.putline(dic.getkey(i)); }
See also: iobase, instm, infile, outstm, outfile, Error handling