fork download
  1. # coding: Shift_JIS
  2.  
  3.  
  4. # 012345678901234567890
  5. indata = [
  6. "A001YAMADA 080",
  7. "B001TANAKA 065",
  8. "A010YAMAMOTO 079",
  9. "B004UETA 049",
  10. "C032ANDO 095",
  11. "D002KOMATSU 060"
  12. ]
  13.  
  14.  
  15. def analyze(str)
  16.  
  17. str.gsub!(/(\d+),(\d+)/, 's[\1,\2]')
  18. str.gsub!(/,CH/, '')
  19. # str.gsub!(/,(ZD|PD)/, '.\1to_i')
  20. str.gsub!(/,(ZD|PD)/, '.to_i')
  21. str.gsub!(/,EQ,/, ' == ')
  22. str.gsub!(/,NE,/, ' != ')
  23. str.gsub!(/,GE,/, ' >= ')
  24. str.gsub!(/,GT,/, ' > ')
  25. str.gsub!(/,LE,/, ' <= ')
  26. str.gsub!(/,LT,/, ' < ')
  27.  
  28. str.gsub!(/,AND,/, ' && ')
  29. str.gsub!(/,OR,/, ' || ')
  30.  
  31. puts str
  32.  
  33. return str
  34.  
  35. end
  36.  
  37.  
  38. #抽出条件例
  39. # (Aクラス かつ 80点以上)または(Bクラス かつ 50点以上)または(Cクラス)を抽出
  40. parm = '(0,1,CH,EQ,"A",AND,14,3,ZD,GE,80),OR,(0,1,CH,EQ,"B",AND,14,3,ZD,GE,50),OR,(0,1,CH,EQ,"C")'
  41.  
  42. siki = analyze(parm)
  43.  
  44.  
  45. indata.each{|s|
  46. if eval siki
  47. p s
  48. end
  49. }
  50.  
  51.  
Success #stdin #stdout 0.01s 7448KB
stdin
Standard input is empty
stdout
(s[0,1] == "A" && s[14,3].to_i >= 80) || (s[0,1] == "B" && s[14,3].to_i >= 50) || (s[0,1] == "C")
"A001YAMADA    080"
"B001TANAKA    065"
"C032ANDO      095"