Ruby:打开文本文件并将行作为字符串参数

时间:2017-12-02 01:25:39

标签: ruby

这是我的代码:

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它应该只打印有效字符串。

我的问题是我似乎无法使其发挥作用。有人可以帮忙吗?

1 个答案:

答案 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