LabVIEW Поиск нескольких строк

Я пытаюсь найти несколько строк в текстовом журнале вместе со следующим шаблоном:

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) вместе с измерением, и я не хочу определять, появляется ли он где-либо еще в журнале. Моя конечная цель - получить данные измерений и единиц измерения из файла.

Любая помощь будет оценена. Спасибо, Рав.


person Rav    schedule 25.02.2019    source источник


Ответы (2)


Я бы сделал это как Саломея, используя регулярные выражения. Так как это немного сложно, у меня есть тестовый VI для них:

введите здесь описание изображения

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.

person sweber    schedule 27.02.2019

Легче искать и реализовывать. В LabVIEW также есть ВП для создания и управления JSON. В качестве альтернативы вы можете использовать регулярные выражения в цикле while, чтобы посмотреть, существует ли он в вашем журнале, может быть, что-то вроде этого:

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

Затем вы можете разделить строку или выбрать строки и получить информацию. Но я бы не рекомендовал это делать, так как это непрактично и бесполезно, если вы хотите использовать код для других ключей. Я надеюсь, что это поможет вам :)

person Salome    schedule 26.02.2019
comment
Вам нужен текстовый журнал в виде строки или вы можете использовать JSON? Я бы добавил комментарий выше, но пока не могу :) - person Salome; 26.02.2019