From: Gianluca S. <gi...@gm...> - 2007-02-06 12:43:51
Attachments:
testcase.tar.gz
|
Hi all, Here is a small test program I wrote: it should read a "test.txt" file, look for lines starting with "$$$$", then show the next line with its position, in terms of line numbers and stream pos. The test.txt file (enclosed in the attachment) has DOS line endings Now, it seems tellg() is actually modifying the stream position and this, at least to me, looks weird. Is that the intended behaviour? The problem does not show if I test it on a file with UNIX LFs (test_UNIX.txt) or running the same program in Linux (or, leaving the #if 0 in place...) I'm using MinGW 5.1.3( gcc 3.4.2 ) with an updated binutils ( 2.16.91) any insight will be greatly appreciated. Cheers Gianluca #include <fstream> #include <string> #include <iostream> using namespace std; int main() { ifstream _file; _file.open ("test.txt"); unsigned int startingLine = 0; std::ios::pos_type startingPosition = 0; unsigned int currentLine = 0; char input[1024]; bool markerFound = false; while ( _file.getline( input, 1024 ) ) { if ( markerFound ) { cout << "Found marker at line: " << startingLine << endl; cout << "Stream position: " << startingPosition << endl; cout << "First line after marker: " << input << endl; } currentLine++; if ( string( input ).substr(0, 4) == "$$$$" ) { // save line index startingLine = currentLine; #if 1 // save stream index startingPosition = _file.tellg(); #endif markerFound = true; } else { markerFound = false; } } _file.close(); return 0; } |
From: Earnie B. <ea...@us...> - 2007-02-06 15:34:35
|
Quoting Gianluca Sforna <gi...@gm...>: > > any insight will be greatly appreciated. > Research msdn.microsoft.com for the functions you're using. It is expected behavior. Earnie |