3.5 文字列 I/O
クラス RWCString は、iostream および Rogue Wave 仮想ストリームの両方に豊富な I/O 機能を提供します。
3.5.1 iostreams
標準の左シフトおよび右シフト演算子は、iostream および RWCString と共に動作するように多重定義されています。
ostream&operator<<(ostream& stream, const RWCString& cstr); istream&operator>>(istream& stream, RWCString& cstr);
これらの演算子のセマンティクスは、以下の演算子のセマンティックスと平行しています。
ostream&operator<<(ostream& stream, const char*); istream&operator>>(istream& stream, char* p);
これらは、コンパイラに付属の標準 C++ ライブラリによって定義されています。つまり、左シフト演算子
<< は、指定の出力ストリームにヌル区切りの文字列を書き込みます。右シフト演算子 >> は、空白類によって区切られた単一トークンを入力ストリームから RWCString に読み取り、以前の内容を置き換えます。
他の関数は、いろいろな RWCString 入力を行うことができます。[1]例えば、readline() 関数は改行によって区切られた文字列を読み取ります。文字を格納する前に空白類を省略するかどうかは、パラメータで指定できます。次の例には、空白類を省略した場合の違いが示されています。
#include <rw/cstring.h>
#include <iostream.h>
#include <fstream.h>
main(){
RWCString line;
{ int count = 0;
ifstream istr("testfile.dat");
while (line.readLine(istr)) // デフォルト値を使用:
// 空白類を省略
count++;
cout << count << " lines, skipping whitespace.\n";
}
{ int count = 0;
ifstream istr("testfile.dat");
while (line.readLine(istr, FALSE)) // NB: 省略しない
// 空白類
count++;
cout << count << " lines, not skipping whitespace.\n";
}
return 0;
}
入力:
line 1 line 5
出力:
2 lines, skipping whitespace. 5 lines, not skipping whitespace.
3.5.2 仮想ストリーム
Rogue Wave 仮想ストリームに対する文字列演算子にも対応しています。
Rwvistream& operator>>(RWvistream& vstream, RWCString& cstr);
Rwvostream& operator<<(RWvostream& vstream,
const RWCString& cstr);
これらの演算子を使用することにより、形式を知らなくても文字列を保存および復元することができます。仮想ストリームについては、第 6 章「仮想ストリームの使い方」を参照してください。
注釈
- ^ メソッド readFile()、readLine()、readString(istream&)、readToDelim()、およびreadToken() の詳細については、『Tools.h++ Class Reference』の RWCString のセクションを参照。