2012-03-24 78 views
0

紅寶石排序我喜歡紅寶石很多,但我不能做某些事情,我可以在Perl,因此請大家幫忙通過第二場

  1. 如何匹配一個或符合其他條目

    在Perl:

    在Ruby中
    while (<$HAN>) { 
        next unless /**$TAB_11|$TAB_35**/; 
    

    f = File.open(li, "r:windows-1251") 
    if f.each do |line| 
        next unless line.include? (tag_11 && tag_35) 
    

    我試過或者,||,而且 - 他們中的一些人在Perl的情況下工作 - 我該怎麼做?

  2. 我想數組排序,但它不正確排序,我需要它的第二個字段排序 - >日期/時間

    unless line.include? (tag_466 && tag_1004) 
    a=[] 
    a.push "******************************** 1.Message Received On S Side ********************************", 
    line,"\n" if line =~ /#{MAT_1}/ #li.console_blink, --to check source 
    a.push "******************************** 3.Message received ES side ********************************", 
    line,"\n" if line =~ /#{MAT_3}/ 
    a.push "******************************** 4.Ticket has been created ********************************", 
    line,"\n" if line =~ /#{MAT_4}/ 
    a.sort! 
    puts a end` 
    

    結果

    ******************************* 2.Message Processed On SGW side ******************************** 
    20120210 08:03:55,872 DEBUG IceTradeMessageMapper - --------- Processing Trade [1311883] --------- 
    
    ******************************** 1.Message Received On SGW Side ******************************** 
    20120210 08:04:05,404 DEBUG MQReceiver - Receive message "<FIXML><TrdCaptRpt RptID="763" 
    
+0

您的Perl和Ruby代碼示例分別缺少'}'和'end'。你應該解決這個問題。 – meagar 2012-03-24 23:22:31

+0

你需要使用兩個'include?'加入一個or。將兩個(字符串?)值邏輯地排在一起不是Ruby表達式的工作方式。 – 2012-03-24 23:23:21

+1

最好在單獨的帖子中有兩個問題,而不是在同一篇文章中。這是因爲Stack Overflow與其他論壇有點不同。 – 2012-03-25 21:15:55

回答

0

Re 1.您可以使用類似Perl的正則表達式匹配(=~)。

next unless line =~ /regular expression|other expression/; 

如果你想與include?做這將是

next unless line.include?(tag_11) || line.include?(tag_35) 

關於第2點我真的不明白你問什麼在這裏,但你可能想看看sort_by

+0

很棒'除非line.include? (tag_466)或line.include?(tag_1004)'工作過, – 2012-03-24 23:37:53

+0

'next除非行=〜/ tag_466 | tag_1004 /;' - 這不起作用....但是感謝Perl提供的是 – 2012-03-24 23:53:16

+0

正如你所見第二個字段(如果它是第二個)是08:03:55 ==>我需要按此排序,或通過1.Message或2.Message我添加到行 – 2012-03-24 23:57:00

0

1)您可以使用IO::foreach作爲一個方便的迭代器通過一個文件,使用match operator來測試正則表達式,就像在perl中一樣。

IO.foreach(li) do |line| 
    next unless line =~ /#{tag_11}|#{tag_35}/ 
    ... 
end 

2)您使用的Array#push有三個參數:你長星號填串,詞法VAR行,文字「\ n」。看來你打算這是一個被認爲是單一記錄的三元組。推只需將它們添加到陣列中,也許你真的想他們是一個子陣列:

a.push [ '**** something ****', line, "\n" ] 

然後你就可以用

a.sort_by! {|e| e[1] } 

由第二個元素進行排序。如果你真的想要一個平面數組,你可以像你一樣推,用01​​到組變成三:

a.each_slice(3).sort_by{|e| e[1]}.flatten(1) 

更高版本:這裏就是我想你問與排序:

irb(main):001:0> a=[] 
irb(main):002:0> a.push "** 1.mumble","20120210 08:04:05,404 DEBUG","\n" 
irb(main):003:0> a.push "** 3.grumble","20120210 08:04:00,404 DEBUG","\n" 
irb(main):004:0> a.push "** 2.mutter","20120210 08:03:05,404 DEBUG","\n" 
=> ["** 1.mumble", "20120210 08:04:05,404 DEBUG", "\n", "** 3.grumble", "20120210 08:04:00,404 DEBUG", "\n", "** 2.mutter", "20120210 08:03:05,404 DEBUG", "\n"] 

# sort by time stamp 
irb(main):005:0> puts a.each_slice(3).sort_by { |label,ts,_| ts }.flatten(1) 
** 2.mutter 
20120210 08:03:05,404 DEBUG 

** 3.grumble 
20120210 08:04:00,404 DEBUG 

** 1.mumble 
20120210 08:04:05,404 DEBUG 

# sort by integer value of first number in the label 
irb(main):006:0> puts a.each_slice(3).sort_by{ |label,ts,_| label.match(/(\d+)/)[0].to_i }.flatten(1) 
** 1.mumble 
20120210 08:04:05,404 DEBUG 

** 2.mutter 
20120210 08:03:05,404 DEBUG 

** 3.grumble 
20120210 08:04:00,404 DEBUG 
+0

'a.push ['**** something ****',line,「\ n」]'沒有解決 - 重複的結果並沒有整理出 – 2012-03-25 21:25:31

+0

'a.each_slice(3 ).sort_by {| E | e [1]}。flatten(1)' - 也失敗了看到下面的結果 - 似乎是一件複雜的事情要做,但它必須是'****************** ************** 6.C進行中******************************* * 4e8 \t 08:04:03.999 \t匹配\t TRACE \t [23] 890 ******************************* * 8.SGW接收ES插入的消息******************************** 20120210 08:04:05,044 DEBUG IceAllocationIn] - 腿數:[1] ******************************** 2.Message Processed On SGW方******************************** 20120210 08:03:55,872 DEBUG IceTradeMessag' – 2012-03-25 21:31:52

+0

感謝您的IO :: foreach - >有用的模塊 - 我會稍後再嘗試 - 因爲我沒有upvote邁克爾的速度是imp ortant和我認爲我們需要寫效率或我們的腳本語言不會使它,感謝您的建議thoug - 仍試圖排序... – 2012-03-25 21:36:24