[求助]关于forx解析变量
2天前 80

假设有123.ini内容如下,

 

[AIDA64 Business]
版本=AIDA64 v4.30.2900/cn
主页=http://www.aida64.com/
报告类型=命令行: /CUSTOM
计算机=CHINA-LING
用户=ling

[DMI]
BIOS|BIOS 属性|系统 BIOS 版本=0.1
BIOS|BIOS 制造商|公司名称=Insyde Software Corp.
系统|系统|制造商=Apple Inc.
系统|系统|产品=MacBookAir6,2
主板|主板|制造商=Apple Inc.
主板|主板|产品=Mac-7DF21CB3ED6977E5
主板|主板|序列号=12345678
处理器1|处理器|制造商=Intel(R) Corporation
处理器1|处理器|版本=Intel(R) Core(TM) i5-4250U CPU @ 1.30GHz

 

 

我要提取出DMI节的内容,代码如下:

 

READ 123.ini,*,&&AllContent

MESS 完整内容:%&AllContent%

ENVI &DMIContent=

ENVI &inDMI=0

ENVI &lineNum=0

 

FORX *NL &AllContent,&&line,

{

    CALC #lineNum=%lineNum% + 1

    MESS 第%lineNum%行:[%&line%]

    IFEX $%&line%=[DMI], TEAM MESS 找到DMI节!| ENVI &inDMI=1

    IFEX $%&inDMI%=1,!! IFEX $%&line%>=[,!! IFEX $%&line%<>[DMI], TEAM MESS 离开DMI节| ENVI &inDMI=0

    IFEX $%&inDMI%=1,!! IFEX $%&line%<>[DMI], TEAM MESS 添加到DMI内容| ENVI &DMIContent=%&DMIContent%%&line%\r\n

}

MESS. DMI节内容:[%&DMIContent%]

 

 

代码运行后,能输出每一行的内容,但DMI节内容为空,请问哪儿错了?

奖励
收藏
点赞
分享
最新回复 (10)
  • avatar image
    爱心会员VIP会员

    把&去掉

    https://www.123pan.com/s/NflRVv-Cm5Sh
  • avatar image
    dhwc 2天前
    楼主   3

    哪个变量去掉前导符&?我把所有变量全部去掉改成全局变量,还是空值?

  • avatar image
    爱心会员VIP会员
    dhwc 哪个变量去掉前导符&?我把所有变量全部去掉改成全局变量,还是空值?

    比较大小用ifex,比较字符串用find

     

    READ 123.ini,*,&&AllContent

    MESS 完整内容:%&AllContent%

    ENVI &DMIContent=

    ENVI &inDMI=0

    ENVI &lineNum=0

     

    FORX *NL &AllContent,&&line,

    {

        CALC #lineNum=%lineNum% + 1

        //MESS 第%lineNum%行:[%&line%]

        find $%&line%=[DMI], ENVI &inDMI=1  //TEAM MESS 找到DMI节!| ENVI &inDMI=1

        IFEX $%&inDMI%=1,!! find $%&line%>=[,!! IFEX $%&line%<>[DMI], ENVI &inDMI=0  //TEAM MESS 离开DMI节| ENVI &inDMI=0

        IFEX $%&inDMI%=1,!! find $%&line%<>[DMI], ENVI &DMIContent=%&DMIContent%%&line%\n  //TEAM MESS 添加到DMI内容| ENVI &DMIContent=%&DMIContent%%&line%\r\n

    }

    MESS DMI节内容:[%&DMIContent%]

     

    QQ截图20251017230000.webp

    https://www.123pan.com/s/NflRVv-Cm5Sh
  • avatar image
    dhwc 2天前
    楼主   5

    👍👍感谢版主

  • avatar image
    dhwc 8小时前
    楼主   6
    527104427 比较大小用ifex,比较字符串用find &nbsp; READ 123.ini,*,&amp;&amp;AllContent MESS 完整内容:%&amp;A ...

    这个代码有点小问题,如果dmi节下面还有别的节,他会一并显示出来?

     

    这一句代码好像没起到作用?

     

    IFEX $%&inDMI%=1,!! find $%&line%>=[,!! IFEX $%&line%<>[DMI], ENVI &inDMI=0

     

     

    我修改了下

     

    READ 123.ini,*,&&AllContent

    ENVI &DMIContent=

    ENVI &inDMI=0

     

    FORX *NL &AllContent,&&line,

    {

        // 如果是节标记行

        find $%&line%>=[,

        {

            // 如果是[DMI]节,开始收集,是其他节,停止收集

            find $%&line%=[DMI], ENVI &inDMI=1!ENVI &inDMI=0

        }

        ELSE

        {

            // 如果不是节标记且在DMI节内,收集内容

            IFEX $%&inDMI%=1, ENVI &DMIContent=%&DMIContent%%&line%\n

        }

    }

     

    MESS DMI节内容:[%&DMIContent%]

     

    DMI输出为空了??

  • avatar image
    爱心会员VIP会员
    527104427 6小时前
    dhwc 这个代码有点小问题,如果dmi节下面还有别的节,他会一并显示出来? 这一句代码好像没起到作用? IFEX $%&inDMI%=1,!! find $%&line%>= ...

    READ 123.ini,*,&&AllContent

     

    ENVI &DMIContent=

     

    ENVI &inDMI=0

     

     

     

    FORX *NL &AllContent,&&line,

     

    {

     

        mstr * &line1=1,1,&line

        // 如果是节标记行

     

        find $%&line1%=[,

     

        {

     

            // 如果是[DMI]节,开始收集,是其他节,停止收集

     

            find $%&line%=[DMI], ENVI &inDMI=1!ENVI &inDMI=0

     

        }!

       {

     

            // 如果不是节标记且在DMI节内,收集内容

     

            IFEX $%&inDMI%=1, ENVI &DMIContent=%&DMIContent%%&line%\n

     

        }

     

    }

     

     

     

    MESS DMI节内容:[%&DMIContent%]

     

     

    https://www.123pan.com/s/NflRVv-Cm5Sh
  • avatar image
    dhwc 4小时前
    楼主   8
    527104427 READ 123.ini,*,&&AllContent ENVI &DMIContent= ENVI &inDMI=0 FORX *NL & ...

    还是空值?

  • avatar image
    爱心会员VIP会员
    527104427 4小时前
    dhwc 还是空值?

    QQ截图20251019212647.webp

    https://www.123pan.com/s/NflRVv-Cm5Sh
  • avatar image
    爱心会员VIP会员
    527104427 3小时前
    此楼层已删除
    https://www.123pan.com/s/NflRVv-Cm5Sh
  • avatar image
    爱心会员VIP会员
    527104427 1小时前
    dhwc 还是空值?

    用正则表达式找到某节点内容,并找到该节点下的键值:

    #code=936T950
    set^ EnviMode=1
    set^ ForceLocal=1
    
    set Section=DMI
    set Key=处理器1|处理器|版本
    set str=
    
    read %CurDir%\123.ini,*,src
    
    sed -ex -f sec=0,.*?\n?\b*?\[%Section%\]\b*?\n{.*?}\n\b*?\[,\001,src
    find *=sec,!! sed -ex -f sec=0,.*?\n?\b*?\[%Section%\]\n{.*},\001,src
    
    find *<>sec,
    {
    	sed -ex Key1=0,{[\[\]\{\}\(\)\|\*\.\?\+\-\^]},\\\001,Key
    	sed -ex -f str=0,.*%Key1%={.*?}\n,\001,sec
    }
    
    mess [%str%]\n\n\n[%sec%]
    
    

     

     

    QQ截图20251020000331.webp

     

     

     

     

    https://www.123pan.com/s/NflRVv-Cm5Sh
返回