Удаление буквенных значений из файла

Добрый вечер Евгений и форумчане! Подскажите пожалуйста как в qt файл очистить от буквенных символов и оставить только цифры?  В С++ был бы код таким:
using namespace std;
 ifstream f; //Поток для чтения.
    double c, b; int n=0;
    f.open(".//text.txt"); //Открываем файл в режиме чтения.
    if(f) //Если открытие файла прошло корректно, то
    {
        while(!f.eof()) //Организован цикл, выполнение цикла
        //прервётся, когда будет достигнут конца файла.
        {
            f>> c >> b; //Чтение очередного значения из потока f в переменную a.
            f.clear();
            f.ignore(32767, '\n');
            if (c > 0 && b != -9999)
            {
              if (!f.eof())
              {
                n++; //Увеличение количества считанных чисел.
              }
            }
        }
    f.close(); //Закрытие потока.

 

 
Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

9
Evgenii Legotckoi
  • 23 июля 2018 г. 0:56

Добрый день!

Не совсем понятно, что этот код в итоге должен делать, но можно считать построчно файл средствами QString и проверить, является ли это число цифрой или нет.
#include <QCoreApplication>
#include <QDebug>
#include <QFile>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QFile txtFile("/path/to/example.txt");

    if (!txtFile.open(QFile::ReadOnly))
        return -1;

    QString digitStr;

    while (!txtFile.atEnd())
    {
        QByteArray line = txtFile.readLine();

        for (char s : line)
        {
            if (QChar(s).isDigit())
            {
                digitStr.append(s);
            }
        }
    }

    qDebug() << digitStr;

    return a.exec();
}

А так в итоге можно реализовать саму проверку на число и более общими средствами C++, как у вас реализовано, по сути реализацию проверки не обязательно делать средствами Qt, да и вопрос в том, нужно ля вам преобразовывать в числ те символы или нет.


    Доброго утра всем! Представленный мною код был написан для копирования (только цифрового) содержимого из одного файла в другой, просто я убрал копирование чтобы упростить код для просмотра, но Вы Евгений угадали ход моих мыслей, так как я хотел копировать файл не в другой файл, а в переменную QString и за это в очередной раз благодарю Вас))

      Добрый вечер Евгений и форумчане! У меня ещё один вопрос: может есть какой-нибудь способ используя код представленный мной выше сразу записать значение потока f в переменную QString ?

        Ну я не уверен, но попробуйте так

        QString str;
        f >> str;
          Evgenii Legotckoi
          • 25 июля 2018 г. 14:45
          • (ред.)

          А вообще, можете использовать стандартные средства Qt, раз уж его используете

          QFile file("file.dat");
          file.open(QIODevice::ReadOnly);
          QDataStream in(&file);    // Чтение данных из файла
          QString str;
          in >> str; 
            К сожалению QString str; f >> str; не работает, пишет C:\Users\Evgeny\Desktop\QT\12661\12661\mainwindow.cpp:57: ошибка: no match for 'operator>>' (operand types are 'std::ifstream {aka std::basic_ifstream<char>}' and 'QString')
            f>> kgk;

            а остальное работает. Спасибо за подсказку! ^

              Тогда или через переменную прогонять, как было сделано, или использовать QDataStream для Qt

                Всё-таки я его написал)):
                void MainWindow::on_pushButton_clicked()
                {
                    ui->textEdit->clear();
                    ui->textEdit_2->clear();
                    QString filePath = QFileDialog::getOpenFileName(this, tr("Open File"),"/home",tr("Images (*.las *.txt)"));
                    if(filePath != "")
                    {
                        ui->lineEdit->clear();
                        ui->lineEdit->setText(filePath);
                    QFile txtFile(ui->lineEdit->text());
                    if (!txtFile.open(QFile::ReadOnly))
                    {
                        QMessageBox::information(this,"Error","Path not correct!");
                        ui->statusBar->showMessage("Error!");
                        return;
                    }
                    QString digitStr;
                    while (!txtFile.atEnd())
                    {
                        QByteArray line = txtFile.readLine();
                        for (char s : line)
                        {
                            digitStr.append(s);
                        }
                    }
                    ui->textEdit->setText(digitStr);
                    QString hjh;
                    QStringList strList=digitStr.split('\n'); // /////
                    QString pkk;
                    QString stg;
                    for (int i = 0; i < strList.size(); ++i)
                    {
                        stg = strList.at(i); // Забираем вторую строку (i)
                        int pkp = 1;
                        for (int trt = 0; trt < stg.size(); ++trt)
                        {
                            if ((stg.mid(trt, 1) == '0' || stg.mid(trt, 1) == '1' || stg.mid(trt, 1) == '2' || stg.mid(trt, 1) == '3' || stg.mid(trt, 1) == '4' || stg.mid(trt, 1) == '5' || stg.mid(trt, 1) == '6' || stg.mid(trt, 1) == '7'
                                     || stg.mid(trt, 1) == '8' || stg.mid(trt, 1) == '9' || stg.mid(trt, 1) == '.'  || stg.mid(trt, 1) == ',' || stg.mid(trt, 1) == '\n' || stg.mid(trt, 1) == ' ' || stg.mid(trt, 1) == '-')
                                    && stg.mid(trt, 2) != "--" && stg.mid(trt, 1) != '#')
                            {
                               ++pkp;
                            }
                            if (pkp == (stg.size()-1))
                            {
                                hjh.append(stg);
                            }
                        }
                      pkk = stg;
                    }
                    QString stgs;
                    QString sas;
                    QString shs;
                    for (int kj = 0; kj < hjh.size(); ++kj)
                    {
                        stgs = hjh.mid(kj, 1);
                        if (!(stgs == " " && sas == " "))
                        {
                            shs.append(stgs);
                        }
                        sas = stgs;
                    }
                    ui->textEdit_2->setText(shs);
                    txtFile.flush();
                    txtFile.close();
                    }
                }

                 

                  Результат:

                  Программа полностью очищает исходный файл (левый textedit) от строк содержащих не цифровые символы (результат в правом textedit) и записывает результат в переменную QString, а дальше можно делать с ней что душе угодно))

                    Комментарии

                    Только авторизованные пользователи могут публиковать комментарии.
                    Пожалуйста, авторизуйтесь или зарегистрируйтесь
                    Ua

                    Qt - Тест 001. Сигналы и слоты

                    • Результат:84баллов,
                    • Очки рейтинга4
                    Ua

                    Qt - Тест 001. Сигналы и слоты

                    • Результат:42баллов,
                    • Очки рейтинга-8
                    ОК

                    Qt - Тест 001. Сигналы и слоты

                    • Результат:47баллов,
                    • Очки рейтинга-6
                    Последние комментарии
                    ИМ
                    Игорь Максимов22 ноября 2024 г. 21:51
                    Django - Урок 017. Кастомизированная страница авторизации на Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
                    Evgenii Legotckoi
                    Evgenii Legotckoi31 октября 2024 г. 23:37
                    Django - Урок 064. Как написать расширение для Python Markdown Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
                    A
                    ALO1ZE19 октября 2024 г. 17:19
                    Читалка fb3-файлов на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
                    ИМ
                    Игорь Максимов5 октября 2024 г. 16:51
                    Django - Урок 064. Как написать расширение для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                    d
                    dblas55 июля 2024 г. 20:02
                    QML - Урок 016. База данных SQLite и работа с ней в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                    Сейчас обсуждают на форуме
                    f
                    firstlunoxod15 февраля 2025 г. 13:46
                    Рисование на QGraphicsScene при зажатой кнопке мыши Подскажите, пожалуйста! Как данный класс можно дополнить, чтобы созданные объекты можно было перемещать мышкой по сцене?
                    Дмитрий
                    Дмитрий3 февраля 2025 г. 16:24
                    Создание deb-пакета. Как создать ярлык на рабочем столе после установки собственного deb-пакета? Всем привет. Сделал свой deb-пакет с программой. Всё устанавливается и работает. Ставлю по пути /usr/bin/my_application. Как для пользователя при установке пакета сразу создать ярлык на раб…
                    NW
                    Nayo Wai30 января 2025 г. 19:22
                    не запускается компьютер!!! Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
                    n
                    nkly3 января 2025 г. 12:52
                    Нужно запретить перемещение только некоторых итемов, остальные перемещать можно. Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
                    M
                    Marsel17 августа 2023 г. 0:26
                    OAuth2.0 через VK, получение email Спасибо большое за помощь и простите за то что отнял время своей невнимательностью.

                    Следите за нами в социальных сетях