gpt4 book ai didi

ruby - 如何让我的 Ruby 脚本接受文件或 STDIN 作为输入?

转载 作者:太空宇宙 更新时间:2023-11-03 16:52:19 25 4
gpt4 key购买 nike

<分区>

我有一个简单的 Ruby 脚本,可以为我将文本文件中的标题“大写”。这是脚本:

$ cat capitalize.rb
#!/usr/bin/ruby -w

file = File.new( ARGV[0] , "r")
while (line = file.gets)
#line.capitalize!
ine = line.split(" ").map {|word| word.capitalize}.join(" ")
puts "\t\t,\t\"#{ine}\""
end
file.close

如果我将文件名传递给它,它会工作正常:

$ cat lowercase
come back with me (Ep. 0301)
murder will out (Ep. 0302)
snake in the grass (Ep. 0308)
goodbye carl erich (Ep. 0309)
nightmares nest (Ep. 0310)
$ capitalize.rb lowercase
, "Come Back With Me (ep. 0301)"
, "Murder Will Out (ep. 0302)"
, "Snake In The Grass (ep. 0308)"
, "Goodbye Carl Erich (ep. 0309)"
, "Nightmares Nest (ep. 0310)"

但我也希望能够像这样运行脚本:

$ cat lowercase | capitalize.rb

或者甚至这样也可以:

$ cat lowercase | capitalize.rb -

但我收到这些错误消息:

$ cat lowercase | capitalize.rb
/home/red/scripts/capitalize.rb:5:in `initialize': can't convert nil into String (TypeError)
from /home/red/scripts/capitalize.rb:5:in `new'
from /home/red/scripts/capitalize.rb:5
$ cat lowercase | capitalize.rb -
/home/red/scripts/capitalize.rb:5:in `initialize': No such file or directory - - (Errno::ENOENT)
from /home/red/scripts/capitalize.rb:5:in `new'
from /home/red/scripts/capitalize.rb:5

我需要在脚本中更改什么?

谢谢!

编辑:

这是回答这个问题的脚本:

$ cat scripts/capitalize.rb
#!/usr/bin/ruby -w

ARGF.each do |line|
ine = line.split(" ").map {|word| word.capitalize}.join(" ")
puts "\t\t,\t\"#{ine}\""
end

感谢所有回复的人。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com