2011-02-25 57 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模块