QT读取文件内容参数

请问这是什么类型的文件,拓展名是.ini ,使用QT怎样读取每个参数的MAX的值?

<PARALIB,LIBID=1,LIBNAME="系统",NUM=1,LIBFILE="sys.par">
    <PARATBL,TBLID=0,TBLNAME="系统",RECNUM=300>
        <PARAREC,RECID=100,RECNAME="运行",TYPE=DEC,MIN=100,MAX=10000>
        <PARAREC,RECID=101,RECNAME=" 错误 ",TYPE=DEC,MIN=100,MAX=10000>
       
    </TBLEND>
</LIBEND>

<PARALIB,LIBID=2,LIBNAME="参数",NUM=8,LIBFILE="usr.par">
    <PARATBL,TBLID=0,TBLNAME="参数0",RECNUM=300>
        <PARAREC,RECID=200,RECNAME="参数名",TYPE=STR,MIN=0,MAX=8>
        <PARAREC,RECID=201,RECNAME="参数",TYPE=DEC,MIN=0,MAX=1>
        <PARAREC,RECID=202,RECNAME="报警",TYPE=STR,MIN=0,MAX=11111111>
        
    </TBLEND>
    <PARATBL,TBLID=1,TBLNAME="参数1",RECNUM=300>
        <TBLCOPY>
        <PARAREC,RECID=300,RECNAME="参数名",TYPE=STR,MIN=0,MAX=8>
        <PARAREC,RECID=301,RECNAME="参数",TYPE=DEC,MIN=0,MAX=1>
        <PARAREC,RECID=302,RECNAME="报警",TYPE=STR,MIN=8,MAX=11111110>
    </TBLEND>
    <PARATBL,TBLID=2,TBLNAME="参数2",RECNUM=300>
        <TBLCOPY>
        <PARAREC,RECID=400,RECNAME="参数名",TYPE=STR,MIN=0,MAX=1>
        <PARAREC,RECID=401,RECNAME="参数",TYPE=DEC,MIN=0,MAX=1>
        <PARAREC,RECID=402,RECNAME="报警",TYPE=STR,MIN=8,MAX=11111100>
    </TBLEND>   
</LIBEND>


以下答案引用自GPT-3大模型,请合理使用:

示例。
这是一个INI文件,Qt可以使用QT自带的QSettings类来读取文件中的内容,从而获取每个参数的MAX值。

以上文件的INI格式如下:
[PARALIB, LIBID=1,LIBNAME="系统",NUM=1,LIBFILE="sys.par"]
 [PARATBL,TBLID=0,TBLNAME="系统",RECNUM=300]
 PARAREC,RECID=100,RECNAME=" 运行 ",TYPE=DEC,MIN=100,MAX=10000
 PARAREC,RECID=101,RECNAME=" 错误 ",TYPE=DEC,MIN=100,MAX=10000

[PARALIB,LIBID=2,LIBNAME="参数",NUM=8,LIBFILE="usr.par"]
 [PARATBL,TBLID=0,TBLNAME="参数0",RECNUM=300]
 PARAREC,RECID=200,RECNAME="参数名",TYPE=STR,MIN=0,MAX=8
 PARAREC,RECID=201,RECNAME="参数",TYPE=DEC,MIN=0,MAX=1
 PARAREC,RECID=202,RECNAME="报警",TYPE=STR,MIN=0,MAX=11111111
 
 [PARATBL,TBLID=1,TBLNAME="参数1",RECNUM=300]
 PARAREC,RECID=300,RECNAME="参数名",TYPE=STR,MIN=0,MAX=8
 PARAREC,RECID=301,RECNAME="参数",TYPE=DEC,MIN=0,MAX=1
 PARAREC,RECID=302,RECNAME="报警",TYPE=STR,MIN=8,MAX=11111110
 
 [PARATBL,TBLID=2,TBLNAME="参数2",RECNUM=300]
 PARAREC,RECID=400,RECNAME="通道名",TYPE=STR,MIN=0,MAX=1
 PARAREC,RECID=401,RECNAME="通道使能",TYPE=DEC,MIN=0,MAX=1
 PARAREC,RECID=402,RECNAME="报警",TYPE=STR,MIN=8,MAX=11111100

使用QT自带的QSettings类解析以上INI文件,可以使用以下代码:
#include <QSettings>
#include <QDebug>
 
int main()
{
     QSettings settings("params.ini", QSettings::IniFormat);
     //从参数表0中读取参数 参数 的 Max值
     int paraMax = settings.value("PARATBL/0/PARAREC/201/MAX").toInt();
     qDebug() << " Max值:" << paraMax;
 
    //从参数表2中读取参数 通道使能 的 Max值
    int channelMax = settings.value("PARATBL/2/PARAREC/401/MAX").toInt();
     qDebug() << " Max值:" << channelMax;
 
     return 0;
}

运行之后输出结果如下:
 Max值: 1
 Max值: 1

如果我的回答解决了您的问题,请采纳我的回答

这是一个文本文件,拓展名为 .ini,通常用于存储配置文件。该文件包含了两个参数库,每个参数库包含多个参数表,每个参数表包含多个参数记录。每个参数记录包含了参数的标识、名称、类型、最小值和最大值等信息。

如果你想使用QT读取每个参数的MAX的值,你可以采用类似于以下的方式读取参数库文件:

#include <QSettings>
#include <QDebug>

QSettings settings("yourfile.ini", QSettings::IniFormat);

// 循环遍历每个参数库
settings.beginGroup("PARALIB");
for (int i = 1; i <= settings.allKeys().count(); i++) {
    settings.beginGroup(QString("LIBID=%1").arg(i));

    // 循环遍历每个参数表
    for (int j = 0; j < settings.value("TBLNUM").toInt(); j++) {
        settings.beginGroup(QString("TBLID=%1").arg(j));

        // 循环遍历每个参数记录
        for (int k = 0; k < settings.value("RECNUM").toInt(); k++) {
            settings.beginGroup(QString("RECID=%1").arg(100 * j + k));

            // 读取参数最大值
            int max = settings.value("MAX").toInt();
            qDebug() << "MAX:" << max;

            settings.endGroup();
        }

        settings.endGroup();
    }

    settings.endGroup();
}
settings.endGroup();

以上代码使用了Qt的QSettings类读取INI文件中的参数值,通过循环遍历每个参数库、参数表和参数记录来获取每个参数的最大值(MAX)。需要注意的是,此方法假设所有参数表都包含相同的参数记录数,因此每个参数表的记录数通过参数库的"TBLNUM"属性读取。如果参数表中的记录数不同,则需要通过其他方式获取记录数。

如果有帮您解决问题,麻烦点一下采纳,谢谢。

你这个虽然拓展名是ini,但也不符合ini的格式,内容看起来像xml,但也不符合xml的格式,感觉像是自己定义的格式,那么没有现成的类可以直接读取,只能自己一行一行读文件自己写逻辑来解析

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^