如何检查文件是否仅包含整数?

问题描述 投票:1回答:2

在我的项目中,我需要上传一个文件,并检查文件内部是否每行都有一个整数(正数或负数),以便可以在矢量中表示它。

由于我正在研究QT和C ++,所以我考虑了两个建议,但是当我在文件中以逗号插入例如“ 35.2”的数字并按开始按钮时,程序都会崩溃。

是否有更好的解决方案来缓解该问题?我正在附上我正在评估的解决方案之一。

QFile file_in(file_name);

file_in.open(QIODevice::ReadOnly | QIODevice::Text);
QTextStream in(&file_in);
int elem;
int pos = 0;
QString s;
QIntValidator valid(-999, 999, this);

while(!in.atEnd())
{
    in >> elem;
    s = QString::number(elem);
    if(!valid.validate(s,pos))
    {
        v.clear();
        QMessageBox msg(this);
        msg.setText("Input non valido");
        msg.exec();
        return;
    }
    else
    {
        v.push_back(elem);
    }
}
c++ qt file integer
2个回答
2
投票

一种更简单的解决方案是逐行读取文件,并检查当前行是否可转换为整数。

Qt已经提供了许多方便的方法。例如,您可能会对QByteArray::toInt()感兴趣。

因此解决方案可能是:

QByteArray::toInt()

这样就不会崩溃。如果每行包含一个整数,则将返回bool validate(const QString & file_name) { QFile in_f(file_name); if(!in_f.open(QIODevice::ReadOnly | QIODevice::Text)) return false; bool is_valid = true; while(is_valid && !in_f.atEnd()) { QByteArray line = in_f.readLine(); line.toInt(&is_valid); // is_valid is set to false if the conversion failed } return is_valid; } ,否则,如果至少一行包含其他内容(字符串,双精度数,...),则将返回true

如此处实现的,如果文件为空,则函数将返回false。当然,如果您想返回true,则可以为此情况添加支票。


1
投票

请在此处阅读有关validate方法的文档:

false

您正在使用有效输入的条件作为https://doc.qt.io/archives/qt-4.8/qintvalidator.html#validate

因此,如果文件中的列表包含1000行,则使用toInt方法将返回错误的肯定结果!

结果不只是您可能认为的是非,否则...

您实际上得到:

valid(-999, 999, this);

© www.soinside.com 2019 - 2024. All rights reserved.