LabVIEW搜索多个字符串

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

我试图用以下模式在文本日志中搜索多个字符串:

s(n)KEY: some data    
s(n)Measurement: some data    
s(n)Units: some data

其中s(n)是变化的空格数。 KEY将在循环中的每次迭代中更改,因为它来自.ini文件。作为示例,请参阅以下代码片段:

   WHITE On Axis Lum_010      OPTICAL_TEST_01      some.seq
   WHITE On Axis Lum_010      Failed

      Bezel1 Luminance-Light Source: Passed
           Measurement:              148.41
           Units:                    fc

      WHITE On Axis Lum_010:         Failed
           Measurement:              197.5
           Units:                    fL

在这种情况下,我只想检测键(WHITE On Axis Lum_010)与Measurement一起出现的时间,我不想检测它是否出现在日志中的任何其他位置。我的最终目标是从文件中获取测量和单位数据。

任何帮助将不胜感激。谢谢你,拉夫。

string labview teststand
2个回答
3
投票

我会使用正则表达式与Salome类似。由于这些有点棘手,我有一个测试VI:

enter image description here

RegEx是:

^\s{2}(.*?):\s*(\S*)\n\s*Measurement:\s*(\S*)\n\s*Units:\s*(\S*)

并且意味着:

^             Find a beginning of a line
\s{2}         followed by exactly two whitespaces
(.*?)         followed by multible characters
:             followed by a ':'
\s*           followed by several whitespaces
(\S*)         followed by several non-whitespaces
\n            followed by a newLine
\s*           followed by several whitespaces
Measurement:  followed by this string
\s*           followed by several whitespaces
(\S*)         followed by several non-whitespaces
\n            followed by a newLine
... and the same for the 'Unit'

括号表示组,并允许轻松收集字符串的有趣部分。如果数据格式不符合预期,RegEx字符串可能需要更多调优,但这是一个起点。

要在字符串中查找更多数据,请将其置于while循环中,并使用移位寄存器将offset past match提供给下一次迭代的偏移量,如果是=-1则停止。


1
投票

搜索和实施更容易。 LabVIEW还具有用于创建和管理JSON的VI。或者,您可以在while循环中使用正则表达式来查看它是否存在于您的日志中,可能是这样的:

WHITE On Axis Lum_010:(\s)*((Failed)|(Pass))\n(\s)+Measurement:(\s)*[0-9]*((\.)[0-9]*){0,1}\n(\s)*Units:\s*\w*

然后你可以分割字符串或选择行并获取信息。但我不建议这样做,因为如果你想将代码用于其他键,那么改变是不切实际的,而且没用。我希望它可以帮助你:)

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