所以我正在重新格式化来自
的名为pipe.txt的txt文件Smith | Steve | D | M | Red | 3-3-1985
Bonk | Radek | S | M | Green | 6-3-1978
Bouillon | Francis | G | M | Blue | 6-3-1975
到
Bonk Radek S Male Green 6/3/1978
Bouillon Francis G Male Blue 6/3/1975
Smith Steve D Male Red 3/3/1985
这是我的代码是输出的app.rb
def pipe
alpha = File.readlines('pipe.txt').sort
alpha.each {|line| line.gsub! '-', '/'}
alpha.each {|line| line.gsub! '|', ''}
alpha.each {|line| line.gsub! 'M', 'Male'}
end
我的test.rb目前看来是这样的
require_relative "app"
require 'minitest'
require 'minitest/autorun'
require 'minitest/rg'
class AppTest < Minitest::Test
def test_pipe_file
pipe = File.open 'pipe.txt'
assert_equal pipe, pipe
end
def test_space_file
space = File.open 'space.txt'
assert_equal space, space
end
def test_comma_file
comma = File.open 'comma.txt'
assert_equal comma, comma
end
def test_pipe_output1
end
end
我想为我的管道方法编写一个测试,重新格式化txt文件并使其通过。我写的方法工作,我只需要一个测试,表明它的工作原理
答案 0 :(得分:0)
以下内容未回答您的问题。把它想象成一个扩展的评论。
如果你的方法是Bonk先生是Monk先生而史蒂夫史密斯是Billy-Bob Thornton,你会看到有问题:
text =<<THE_END
Thornton | Billy-Bob | D | M | Red | 3-3-1985
Monk | Radek | S | M | Green | 6-3-1978
Bouillon | Francis | G | M | Blue | 6-3-1975
THE_END
def pipe(lines)
alpha = lines.sort
alpha.each {|line| line.gsub! '-', '/'}
alpha.each {|line| line.gsub! '|', ''}
alpha.each {|line| line.gsub! 'M', 'Male'}
end
pipe(text.lines)
#=> ["Bouillon Francis G Male Blue 6/3/1975 \n",
# "Maleonk Radek S Male Green 6/3/1978\n",
# "Thornton Billy/Bob D Male Red 3/3/1985\n"]
考虑这样做:
def pipe(lines)
lines.sort.map { |line| line.sub(/\|\s+M\s+\|/,'Male')
.gsub(/(?<=\d)\-(?=\d)/,?/)
.delete(?|) }
end
pipe(text.lines)
#=> ["Bouillon Francis G Male Blue 6/3/1975 \n",
# "Monk Radek S Male Green 6/3/1978\n",
# "Thornton Billy-Bob D Male Red 3/3/1985\n"]
注意:
"M"
之前,必须将"Male"
更改为|
,以便您可以确定每行中要替换的"M"
。"F"
更改为"Female"
: - )gsub
的正则表达式,/(?<=\d)\-(?=\d)/
替换前面带有/
的数字的连字符。 (?<=\d)
是一个“积极的看法”; (?=\d)
是一个“积极的向前看”。这将确保我们不会弄乱桑顿先生的名字。