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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Редактирования строки в файле QTextStream  (Прочитано 9938 раз)
alexey.pertcev
Гость
« : Октябрь 20, 2011, 03:17 »

Господа,
прошу не пинать сильно, но нигде пока не нашел ответа

Задача поправить строку в текстовом файле, то есть
взять строку из файла, поправить её и засунуть в обратно на тоже место,
Взять и поправить я могу, но при вставке поправленная строка записывается не туда куда нужно..
можно ли это сделать с помощью QTextStream?(думаю что можно) если да, то какие методы нуно при этом использовать?

Моё поделие:
    QFile file(name_file);
    if (!file.open(QIODevice::ReadWrite | QIODevice::Text))
        return false;

    QTextStream in(&file);
    while (!in.atEnd()) {
       QString line = in.readLine();
        if (line.contains(rx)){  //проверяю нужно ли править строку
            in << line.append("   <-- changed string\n");  //хочу записать измененную строку в то же место откуда взял
        }
    }
Записан
Bepec
Гость
« Ответ #1 : Октябрь 20, 2011, 07:08 »

И походу у тебя проблема в том, что он пишет на строчку ниже?

Или куда он у тебя что пишет Улыбающийся

"Не туда куда нужно" - я такого места незнаю Улыбающийся

Приведи простейший пример аля

Было:
Код:
а
б
в // сюда нужно перезаписать

Стало:
Код:
а 
в //перезаписало
в

Сразу станет понятней.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #2 : Октябрь 20, 2011, 09:21 »

И походу у тебя проблема в том, что он пишет на строчку ниже?
да, потому что readLine() сразу перемещает курсор к следующей строке

должно подойти такое:
Код
C++ (Qt)
QString line = in.readLine();
if (line.contains(rx)){  //проверяю нужно ли править строку
   file.seek(file.pos() - line.length() - 1); // ещё единичка для перевода строки
   in << line.append("   <-- changed string\n");  //хочу записать измененную строку в то же место откуда взял
}
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
alexey.pertcev
Гость
« Ответ #3 : Октябрь 20, 2011, 17:19 »

Уточнение проблемы:
Измененные программой строки не перезаписываются в то же место, а добавляются в конец файла
то есть сейчас результат работы такой:
до
Код:
1строка
2строка(нужно изменить)
3сторка
4строка(нужно изменить)
после
Код:
1строка
2строка(нужно изменить)
3сторка
4строка(нужно изменить)
2строка(измененная)
4строка(измененная)

Добавление
 file.seek(file.pos() - line.length() - 1);
никак не повлияло на результат, мне кажется что дело в операторе <<, т.к. он добавляет сразу в конец файла.
Возможно нужно использовать что-то вместо него?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #4 : Октябрь 20, 2011, 17:30 »

можно ещё попробовать
Код
C++ (Qt)
in.device()->seek(file.pos() - line.length() - 1);
а если не поможет, тогда наверное лучше работать без QTextStream - напрямую с QFile методами readLine(), seek(), write()
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
alexey.pertcev
Гость
« Ответ #5 : Октябрь 20, 2011, 20:21 »

Реализовал вот так:
Код:
    
while (!file.atEnd()) {
        line = file.readLine();
        string = line;
        if (string.contains(rx)){
            std::cout << "  " << qPrintable(string);
            file.seek(file.pos() - line.length());

            line.clear();
            line.insert(0,string.toLower());
            file.write(line);
        }
    }

Спасибо за помошь)

Исправил, после file.write "курсор" сам устанавливается в начало следующей строки
« Последнее редактирование: Октябрь 20, 2011, 23:20 от alexey.pertcev » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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