2017-12-14 17 views
1

Simulink를 사용하여 TCP/IP를 통해 원격 서버에서 실시간으로 전송 된 일부 문자열을 처리하고 있습니다.Simulink m-function에서 regex를 사용하여 문자열에서 n 번째 필드 추출

$FORMAT,YYYY-MM-DD HH:MM:SS.FFF,field1,field2,field3,field4,field5,field6*XX 

fields1-3 및 입력란 5와 문자열 입력란 6입니다 : 내가 시뮬링크의 모든 몇 밀리 초를 받고 있어요 (ASCII 정수의 형태로) 문자열이 (쉼표로 구분 된 필드)입니다. XX는 XOR 체크섬입니다. Field3은 값의 이름이 무엇인지 알려주고 Field4에는 정수 값이 있으며이 두 값은 정규식으로 추출해야하는 필드입니다. 어떻게하면됩니까?

추신 : 수신 측 Simulink (2016a)에서 TCP/IP 수신 블록을 가지고 있으며 문자열이 Simulink의 m-function에서 처리되므로 일반 Matlab 파일의 일부 제한 사항이 있습니다 (예 : strsplit 메서드는 여기에서 작업하십시오.

+1

필드 중 쉼표가 포함될 수 있습니까? – gnovice

+0

번호 필드에는 숫자, 부동 소수점의 점, A-Z의 문자 (쉼표 없음)가 포함됩니다. – MCLenc

답변

1

Simulink의 "m-function"이 지원하는 정규식은 모르지만, capturing groups을 추출 할 수 있으면 각 필드를 쉽게 일치시킬 수 있습니다.

^   # start of the line 
[^,]* , # format 
[^,]* , # date 
[^,]* , # field1 
[^,]* , # field2 
([^,]*) , # field3 in capture group 1 
([^,]*) , # field4 in capture group 2 
      # we don’t need to match any more fields; we have the two we want 

그리고 여기에 컴팩트 형태 : 여기에 대한 정규식 확장 공백과 의견, 이해의 목적이다

^[^,]*,[^,]*,[^,]*,[^,]*,([^,]*),([^,]*), 

일치 캡처 그룹 1과 2 (matches[1]은, $1), field3 및 field4의 내용을 가져올 수 있습니다.