Russian Qt Forum
Ноябрь 01, 2024, 06:35 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Удаление введенного из QTextStream  (Прочитано 3812 раз)
Zekses
Гость
« : Январь 30, 2011, 14:45 »

Подскажите пожалуйста как в QT удалить из файла только что отправленные в него через QTextStream символы. В частности - у меня в цикле записывается лишний endl, который хотелось бы просто удалить, а не городить проверок на "последний член контейнера"
Записан
DOOMer
Чайник
*
Offline Offline

Сообщений: 95



Просмотр профиля
« Ответ #1 : Январь 30, 2011, 17:25 »

Покажите ваш цикл, пдз.
Записан

Linux x86_64 && Qt 5.4.0 && Qt 4.8.6t && GCC 4.9.2
Zekses
Гость
« Ответ #2 : Январь 30, 2011, 17:37 »

Цитировать
           for(int indexer = 0; indexer < value.size(); indexer++)
            {
                QString toWrite =  "\"" + value[indexer] + "\"";
                out << toWrite;

                if(indentLevel < 2)
                    out << endl;
            }

    

value это объект типа QStringList
out cоответственно QTextStream натравленный на открытый файл.

в оригинале было:

Цитировать
       foreach(QString part, value)
        {
            out << "\"" + part + "\"" << endl;
        }

но вот конкретно последний endl который в сейчашнем варианте отсекается с помощью if(indentLevel < 2) не позволяет мне использовать foreach тк я так и не нашёл в документации к QTextStream как его стереть из уже записанного.

По большому счёту тут проблема даже не в foreach, а в том что мне приходится плодить дополнительный if в цикле из-за того что я тупо не знаю как удалить один единственный закрывающий endl. И сие меня прямо скажем удручает.Тк это сейчас это всего лишь плохая практика, а когда файлов обрабатываемых этим циклом станет много то может ещё и солидно сказаться на производительности...
« Последнее редактирование: Январь 30, 2011, 17:50 от Zekses » Записан
DOOMer
Чайник
*
Offline Offline

Сообщений: 95



Просмотр профиля
« Ответ #3 : Январь 30, 2011, 19:57 »

Если уж так критичен лишний if  в цикле, то можно сначала выгрузить все в какой-нить верменный QByteArray, потом удалить лишний утвд ghb gjvjob QByteArray::chop(int n)  и уже после все сразу выгрузить в QTextStream, связанный с открытм файлом.

Хотя ещё неизвестно что в итоге будет быстрее на больших файлах.
Записан

Linux x86_64 && Qt 5.4.0 && Qt 4.8.6t && GCC 4.9.2
Zekses
Гость
« Ответ #4 : Январь 30, 2011, 20:25 »

Похоже я сегодня туплю Улыбающийся

Цитировать
foreach(QString part, value)
{
    out << "\"" + part + "\"" << endl;
}
if(indentLevel > 2)
    out.seek(out.pos()-1);

решает мою проблему >_<
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.044 секунд. Запросов: 22.