2011-02-25 82 views
0

我必須使用Perl將標記和值中的FIX(金融信息交換)消息標記爲消息,我們具有不同類型的消息,如ExecutionReport,NewOrderSingle,CancelRequest ..日誌文件中的消息如下所示在perl中標記消息

2011-02-17 12:01:46870 INFO ExecutionReport(8 = FIX.4.29 = 33235 = 849 = ZZZ56 = XXXX34 = 455452 = 20110217-17:01:4650 = MCDV57 = kgs37 = 86669611 = 2732655.1876在26.15處的COT100 = 212 = BBBB17 = 21728781020 = 0150 = 139 = 155 = HHHHH48 = 44490310822 = 1207 = US54 = 138 = 12000040 = 115 = USD59 = 032 = 10031 = 26.15151 = 11200014 = 80006 = 26.1472560 = 20110217- (美元)訂購編號#86669664 = 201102235847 = VVV10 = 221)

我想此消息作爲拆分

  1. TOKEN1:消息類型(ExecutionReport)
  2. token2:實際MSG((8 = FIX4.2 .... 10 = 221)

如何在msg中省略初始的某些字符(如日期,時間,INFO等)&使用perl將這個信息分割到2個以上的部分...?

(注意:不要誤會,實際數據是由控制字符(^ A)delimeted ..此不可見)

感謝

回答

1

看起來你只是想拆就空白,所以嘗試是這樣的:

my $logline = "2011-02-17 12:01:46,870 INFO ExecutionReport (8=FIX.4.29=3..."; 
my ($date, $time, $level, $type, $msg) = split(/\s+/, $logline, 5); 

現在,您可以分別處理每個單詞和變量$type$msg抱着你特別提到的兩個元素。

+0

僅供參考,OP是有點不清楚有關數據的格式,但我相信'^ A'定界符出現在「8 = FIX ...... = COT100」序列。日期/時間/級別/等。可能只是空白分隔。 – pilcrow 2011-02-25 22:22:38

+0

@pilcrow:謝謝,我已經更新了我的答案,而不是分隔空間。 – maerics 2011-02-25 23:38:39

+0

是的...味精(8 = FIX4.2 ....)由^ A分隔....日期,時間,級別,msg_type是由空間...感謝您的答案。 – Naveen 2011-02-26 02:11:06

1

你可以嘗試使用PFIX CPAN模塊