Re: Efficiently reading a string from a specific point in a file
On 2007-05-11 21:56, James Kanze wrote:
On May 11, 7:09 pm, Erik Wikstr?m <Erik-wikst...@telia.com> wrote:
On 2007-05-11 17:28, Richard Herring wrote:
In message <1178892634.840378.29...@q75g2000hsh.googlegroups.com>,
Gianni Mariani <gi3nos...@mariani.ws> writes
On May 11, 11:01 pm, Erik Wikstr?m <eri...@student.chalmers.se> wrote:
...
std::string get_string(std::ifstream &in,
std::ifstream::pos_type start,
std::ifstream::pos_type end)
{
char* s = new char[end - start + 1];
no corresponding delete[] ...
use std::vector<char> s(end - start + 1);
in.get(s, end - start + 1);
return std::string(s);
}
Notice that by default get() stops reading at \n, if you don't want
that behaviour you need to provide a third argument which is a
delimiting character, \0 should work if you never want it to stop
reading.
If you know exactly how many characters you want to read, use in.read().
No, read() is for unformated data (binary) get() should be used for text.
What makes you say that? read() works perfectly well for text.
Note, however, that there is not necessarily a relationship
between the number of characters, and the difference end -
start, converted to an integral type. It will probably work
under Unix, but will certainly result in two many characters
under Windows, and on some systems, it may result in nothing
even remotely usable.
Well, you can of course use whichever one you like, but with get() you
get the null-character at the end of the array for free, which you don't
with read().
--
Erik Wikstr?m