On 29.10.2015 00:43, Thiago Macieira wrote:
On Thursday 29 October 2015 00:36:08 Igor Mironchik wrote:
This is good, but what if I need to seek stream to the one character
back position? Can I simple write
stream.seek( stream.pos() - 1 );
or I have to keep in mind codec? If so how can I seek to one character
back position and don't worry about codecs, etc...
Avoid doing that. Seeking the stream is an expensive operation since
QTextStream needs to flush the buffers, reposition the device and reconvert
the input into UTF-16 without Carriage Return.
I don't know what happens if you position it after the CR but before the LF. I
know what happens if you position in the middle of a multibyte sequence: the
first character you'll read will be either mojibake or the Unicode Replacement
Character (U+FFFD).
It's sadly. But you are completely right. Even more: QTextStream::pos()
much more expensive then QTextStream::seek(). In my first implementation
I did some reading/parsing ... then calculating of percent of
completeness of parsing using QTextStream::pos() and emiting signal with
calculated percent. Very simple. But parsing of ~100 KB file with such
calculations using QTextStream::pos() takes ~25 seconds. When simple
commenting using QTextStream::pos() reduce parsing time to 1-2 seconds.
And I had to use QFile::pos() for such a case. But it wasn't so simple
as I described, because in some cases I needed to seek stream to some
position... And I refused even from seek operations...
So now parsing of such file is just a moment... :)
P.S. Why QTextStream doesn't have something like get(), peek(), unget(),
putback()?
--
Best Regards,
Igor Mironchik.
_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest