2017-12-14 6 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と文字列がfield6です:私はSimulinkでごとに数ミリ秒を取得しています(ASCII整数の形で)文字列は、この(カンマで区切られたフィールド)です。 XXはXORチェックサムです。 Field3は、値の名前は何ですか、Field4には整数値があり、これら2つは正規表現で抽出する必要があるフィールドです。どうすればいいですか?

PS:受信側のSimulink(2016a)にはTCP/IP受信ブロックがあり、その文字列はSimulinkのm関数で処理されるため、通常のMatlabファイルではいくつかの制限があります(例えばstrsplitメソッドは

+1

いずれのフィールドにもカンマが含まれていますか? – gnovice

+0

番号フィールドには、数字、浮動小数点のドット、およびA〜Zの文字(カンマなし)が含まれます。 – MCLenc

答えて

1

Simulinkの "m関数"がサポートする正規表現の種類はわかりませんが、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)、フィールド3とフィールド4の内容を取得することができます。

関連する問題