現在、ifstreamで読み込んだテキストデータをgetlineで一行ずつ取り込み、
処理することを考えております。まずは、目的の行であるかサーチして
目的のキーワードを見つけたらその行から処理をします.
検索機能と処理機能を分けたいと思いますので、検索でヒットした
行を処理ルーチンでもう一度読み込みたいのでファイルの参照位置を
一行戻したいと考えております。
この、ファイルの参照位置を一行戻すというところで苦労しておりますので
ご意見をお聞かせいただきたいと思います。
当然、seekgを使うと言うことになると思いますが、
この挙動がマニュアルを見てもよくわかりません。
istream& seekg ( streampos pos );
istream& seekg ( streamoff off, ios_base::seekdir dir );
とありますが、2番めの関数は基準位置からの移動ということで
わかりやすいのですが、一番目のpositionはどこからのものなのでしょうか。
直感的に、2番めのios_base::curのことかと思ったのですが、
そうでも無さそうです。
この様な状況を踏まえて、いろいろ実験をしてみました.
#include <iostream>
#include <fstream>
int main(){
std::ifstream ifs("./test.txt");
std::string buf;
getline(ifs, buf);
std::cout<<buf<<std::endl;
ifs.seekg(-1);
getline(ifs, buf);
std::cout<<buf<<std::endl;
}
helloの出力が2回行われます。ただ、他の例(どこが違うのか
よくわからないためサンプルが示せませんが)では値が得られない
(EOF扱いだと思われます)ため、この例だとたまたま動いている
だけかとおもわれます。
seekg(i, ios_base::cur) (iは任意の負のint)だと当然ですが、行単位ではなく、
文字数ごとに遡ります。(これを使って、改行文字を探すしかないのかとも
考えております。)
istream& seekg ( streampos pos );
の使い方についてアドバイスいただけると幸です。