String LabVIEW搜索多个字符串

String LabVIEW搜索多个字符串,string,labview,teststand,String,Labview,Teststand,我正在尝试使用以下模式在文本日志中搜索多个字符串: s(n)KEY: some data s(n)Measurement: some data s(n)Units: some data 其中sn是变化的空间数。密钥将在循环中的每次迭代中更改,因为它来自.ini文件。例如,请参见以下日志片段: WHITE On Axis Lum_010 OPTICAL_TEST_01 some.seq WHITE On Axis Lum_010 Fail

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

s(n)KEY: some data    
s(n)Measurement: some data    
s(n)Units: some data
其中sn是变化的空间数。密钥将在循环中的每次迭代中更改,因为它来自.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上的白色键何时与测量一起出现,而不想检测它是否出现在日志中的任何其他位置。我的最终目标是从文件中获取度量和单位数据


任何帮助都将不胜感激。谢谢你,Rav。

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

WHITE On Axis Lum_010:(\s)*((Failed)|(Pass))\n(\s)+Measurement:(\s)*[0-9]*((\.)[0-9]*){0,1}\n(\s)*Units:\s*\w*
然后可以拆分字符串或拾取行并获取信息。 但是我不建议这样做,因为如果您想将代码用于其他键,那么更改是不切实际的,也没有用。
我希望它能帮助您:

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

WHITE On Axis Lum_010:(\s)*((Failed)|(Pass))\n(\s)+Measurement:(\s)*[0-9]*((\.)[0-9]*){0,1}\n(\s)*Units:\s*\w*
然后可以拆分字符串或拾取行并获取信息。 但是我不建议这样做,因为如果您想将代码用于其他键,那么更改是不切实际的,也没有用。
我希望它能帮助你:

我会用正则表达式做类似于莎乐美的事情。由于这些有点棘手,我为它们准备了一个测试VI:

正则表达式是:

^\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'
括号表示组,并允许轻松收集字符串的有趣部分。 如果数据的格式不符合预期,则正则表达式字符串可能需要进行更多调整,但这是一个起点


若要在字符串中查找更多数据,请将其放入while循环,并使用移位寄存器将过去匹配的偏移量输入到下一次迭代的偏移量中,如果偏移量=-1,则停止该操作。

我将使用正则表达式执行类似于Salome的操作。由于这些有点棘手,我为它们准备了一个测试VI:

正则表达式是:

^\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'
括号表示组,并允许轻松收集字符串的有趣部分。 如果数据的格式不符合预期,则正则表达式字符串可能需要进行更多调整,但这是一个起点


要在字符串中查找更多数据,请将其放入while循环,并使用移位寄存器将过去匹配的偏移量输入到下一次迭代的偏移量中,如果偏移量=-1,则停止。您需要将文本日志作为字符串还是使用JSON?我想在上面添加一条评论,但我还不能这样做:您需要文本日志作为字符串还是可以使用JSON?我想在上面添加一条评论,但我还不能这样做: