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

Добрый вечер Евгений и форумчане! Подскажите пожалуйста как в 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
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

9
Evgenii Legotckoi
  • 22. Juli 2018 14: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;

          А вообще, можете использовать стандартные средства 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, а дальше можно делать с ней что душе угодно))

                    Kommentare

                    Nur autorisierte Benutzer können Kommentare posten.
                    Bitte Anmelden oder Registrieren
                    Letzte Kommentare
                    A
                    ALO1ZE19. Oktober 2024 18:19
                    Fb3-Dateileser auf Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
                    ИМ
                    Игорь Максимов5. Oktober 2024 17:51
                    Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                    d
                    dblas55. Juli 2024 21:02
                    QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                    k
                    kmssr9. Februar 2024 05:43
                    Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
                    Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
                    Jetzt im Forum diskutieren
                    J
                    JacobFib17. Oktober 2024 13:27
                    добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
                    JW
                    Jhon Wick2. Oktober 2024 01:52
                    Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
                    КГ
                    Кирилл Гусарев27. September 2024 19:09
                    Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
                    F
                    Fynjy22. Juli 2024 14:15
                    при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

                    Folgen Sie uns in sozialen Netzwerken