LabVIEW搜索多个字符串

时间:2019-02-25 19:51:46

标签: string labview teststand

我正在尝试使用以下模式一起在文本日志中搜索多个字符串:

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

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

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

2 个答案:

答案 0 :(得分:3)

我会使用正则表达式类似于Salome。由于这些操作有些棘手,因此我为他们提供了一个测试VI:

enter image description here

正则表达式为:

^\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 :(得分: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*

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