<
html
>
<
head
>
<
title
>PTypes: streams: examples</
title
>
<
meta
http-equiv
=
"Content-Type"
content
=
"text/html; charset=iso-8859-1"
>
<
link
rel
=
"stylesheet"
href
=
"styles.css"
>
</
head
>
<
body
bgcolor
=
"#FFFFFF"
leftmargin
=
"40"
marginwidth
=
"40"
>
<
p
><
a
href
=
"../index.html"
><
img
src
=
"title-21.png"
width
=
"253"
height
=
"39"
alt
=
"C++ Portable Types Library (PTypes) Version 2.1"
border
=
"0"
></
a
>
<
hr
size
=
"1"
noshade>
<
p
class
=
"hpath"
><
a
href
=
"index.html"
>Top</
a
>: <
a
href
=
"streams.html"
>Streams</
a
>:
Examples </
p
>
<
p
><
b
>Example 1.</
b
> This simple program creates a new file and writes a string
to it.</
p
>
<
blockquote
>
<
pre
>#include <
pstreams.h
>
USING_PTYPES
int main()
{
<
span
class
=
"comment"
>// 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.</
span
>
outfile f(fname);
f.set_bufsize(1024); <
span
class
=
"comment"
>// the default value in this version is 8192</
span
>
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;
}
</
pre
>
</
blockquote
>
<
p
><
b
>Example 2.</
b
> 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.</
p
>
<
blockquote
>
<
pre
>#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();
<
span
class
=
"comment"
>// a C identifier begins with a letter</
span
>
if (c & letters)
{
<
span
class
=
"comment"
>// ... and may contain letters and digits</
span
>
string ident = f.token(identchars);
int i;
if (!dic.search(ident, i))
dic.ins(i, ident, 0);
}
else
<
span
class
=
"comment"
>// ignore everything else</
span
>
f.skiptoken(otherchars);
}
}
catch (estream* e)
{
pout.putf("Error: %s\n", e->get_message());
delete e;
}
<
span
class
=
"comment"
>// now print the dictionary</
span
>
for (int i = 0; i <
dic.get_count
(); i++)
pout.putline(dic.getkey(i));
}
</pre>
</
blockquote
>
<
p
class
=
"seealso"
>See also: <
a
href
=
"streams.iobase.html"
>iobase</
a
>, <
a
href
=
"streams.instm.html"
>instm</
a
>,
<
a
href
=
"streams.infile.html"
>infile</
a
>, <
a
href
=
"streams.outstm.html"
>outstm</
a
>,
<
a
href
=
"streams.outfile.html"
>outfile</
a
>, <
a
href
=
"streams.errors.html"
>Error
handling</
a
></
p
>
<
hr
size
=
"1"
>
<
a
href
=
"../index.html"
class
=
"ns"
>PTypes home</
a
>
</
body
>
</
html
>