这是我的代码:
if ARGV.length != 1
puts "We need exactly one parameter. The name of a file."
exit;
end
filename = ARGV[0]
puts "Going to open '#{filename}'"
fh = open filename
fh.each do |line|
HID_num(line)
end
fh.close
def HID_num(str)
temp = str.split(" ")
temp.map do |element|
matches = element.match(/\A[A-Z]{4}(\d{8})\z/)
next unless matches
matches[1]
end.compact
end
所以我的问题是我需要打开任何textfile.txt
并转到终端呼叫ruby example.rb textfile.txt
它应该只打印有效字符串。
我的问题是我似乎无法使其发挥作用。有人可以帮忙吗?
答案 0 :(得分:1)
你真的很亲密。
首先,您在调用HID_num时忘记了 puts 方法,以打印输出。
接下来,在调用方法之前定义方法。 Ruby中的默认风格被解释。否则你会遇到 NoMethodError 。
最后,要单独打印实际匹配的子字符串,尝试映射!而不是地图方法。它用匹配的子字符串覆盖原始字符串数组,从而保留匹配。
temp.map! do |element|
matches = element.match(/\A[A-Z]{4}(\d{8})\z/)
next unless matches
matches[1]
end.compact