我正在尝试使用以下模式一起在文本日志中搜索多个字符串:
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一起出现,并且我不想检测它是否出现在日志中的其他位置。我的最终目标是从文件中获取测量和单位数据。
任何帮助将不胜感激。谢谢你,拉夫。
答案 0 :(得分:3)
我会使用正则表达式类似于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'
括号表示组,并允许轻松地收集字符串的有趣部分。 如果数据格式不符合预期,则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*
然后,您可以分割字符串或选择行并获取信息。 但是我不建议这样做,因为更改是不切实际的,并且如果您想将代码用于其他键也没有用。 希望对您有所帮助:)