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

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

0 голосов
/ 25 февраля 2019

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Я бы сделал это аналогично Саломе, используя регулярные выражения.Так как это немного сложно, у меня есть тестовый 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.

0 голосов
/ 26 февраля 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*

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

...