LINUX.ORG.RU

Как в qt построчно отредактировать файл ?

 ,


0

1

Есть текстовой файл, в который функция должна добавлять колонку данных, нужно считать строку и добавить к ней новые данные и переписать старую строку новой. Вот так пробую, но затирает следующую строку:

QFile file("123.txt");
    if (!file.open( QIODevice::Text | QIODevice::ReadWrite))
    {
        qDebug() << "error" << file.errorString();
        return;
    }
    QTextStream out(&file);

    while (!file.atEnd()) {
        QString line2 = file.readLine();
        qDebug() << "line2_" << line2;

        file.seek(file.pos() - line2.length() - 1); // ещё единичка для перевода строки
        line2 = line2.remove(line2.length()-1,1); //удаляю перевод каретки
        qDebug() << "line2_mod" << line2;

        QString newstr = line2 + "   <-- changed string\n";

        qDebug() << "newstr" << newstr;

        out << newstr;  //хочу записать измененную строку в то же место откуда взял
    }
    file.close();

Вообщем можно ли как-то через qfile или qtextstream указать ему позиции исходной строки, которую надо заменить новой более длинной.

Ты понимаешь, что тебе нужно сформировать новый файл и удалить старый?

Иначе, коли новая строка будет хоть на байт отличаться от старой, то ты хоть удавись, но ничего у тебя не выйдет!

И культяпки здесь не при чем. Здесь просто властвует здравый смысл!!!

anonymous
()

И да, ЛОР вообще скатился в сраное говнище, раз здесь такие дебильные вопросы не удаляются сразу же с (-7)!!111

anonymous
()

Вообщем

В общем, сначала выучи русский язык. Затем выучи логику. Потом — кресты. А уж как все будет получаться, берись за культяпки.

anonymous
()
Ответ на: комментарий от anonymous

Эдик, в 2к19 твоя сишечка с голым posix нахрен никому не сдались.

Аффтар, если файл небольшой, то читай его полностью в память, редактирую, а потом перезаписывай старый файл.

ox55ff ★★★★★
()
Ответ на: комментарий от ox55ff

Это самый просто способ, ну файл должен быть порядка 7000 строк. Файл состоит из 5 столбиков по 1000 строк данных и так 7 раз в течение проги он будет добавляться.

user2132
() автор топика

    QStringList lines = QString(file->readAll()).split('\n',QString::SkipEmptyParts);
    file->resize(0);
    for(int i=0;i<lines.size();i++)
    {
        //
        file->write((lines[i] + "\n").toUtf8());
    }

anonymous
()

Нельзя в середине файла добавлять данные. Поэтому читайте из одного файла, пишите с новой колонкой в другой, потом переименовывайте поверх старого.

slovazap ★★★★★
()
Ответ на: комментарий от user2132

Строки это абстракция прикладного уровня. Для файловой системы файл это всего лишь последовательность байт. Так что под размером следует понимать количество байт, а не строк. Если файл легко влезает в ОЗУ, то не надо заниматься хитрыми алгоритмами частичной перезаписи.

Чтобы добавить что-то в середину файла тебе нужно будет вторую часть файла сдвинуть вправо на размер вставляемых данных. А как это сделать? Считать в память и записать по новому смещению. Ну т.е. ты опять читаешь файл в память, как и в предложенном мною способе. Нет никакого выигрыша.

ox55ff ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.