Top: Streams: Examples

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

PTypes home