gpt4 book ai didi

ruby - 没有这样的文件或目录@rb_sysopen ruby

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

尽管文件存在于文件夹中,但仍面临以下问题。

H:\Ruby_test_works>ruby hurrah.rb
hurrah.rb:7:in `read': No such file or directory @ rb_sysopen - H:/Ruby_
test_works/SVNFolders.txt (Errno::ENOENT)
from hurrah.rb:7:in `block in <main>'
from hurrah.rb:4:in `each_line'
from hurrah.rb:4:in `<main>'

输入文件 (input.txt) 列以制表符分隔。

10.3.2.021.asd  10.3.2.041.def  SVNFolders.txt
SubversionNotify Subversionweelta post-commit.bat
Commit message still rake customemail.txt
mckechney.com yahoo.in ReadMe.txt

代码:

dir = 'H:/Ruby_test_works'
file = File.open("#{dir}/input.txt", "r")

file.each_line do |line|
initial, final, file_name = line.split("\t")
#puts file_name
old_value = File.read("#{dir}/#{file_name}")

replace = old_value.gsub( /#{Regexp.escape(initial)}, #{Regexp.escape(final)}/)
File.open("#{dir}/#{file_name}", "w") { |fi| fi.puts replace }

end

我试过同时使用正斜杠和反斜杠,但没有成功。我缺少什么,不确定。谢谢。

puts file_name 给出以下值

SVNFolders.txt
post-commit.bat
customemail.txt
ReadMe.txt

最佳答案

file_name 末尾包含换行符 \n,它不会被打印但会弄乱路径。您可以通过先删除 line 来解决此问题:

initial, final, file_name = line.strip.split("\t")

调试代码时,请注意puts。引用其 documentation揭示了一个丑陋的真相:

Writes the given object(s) to ios. Writes a newline after any that do not already end with a newline sequence.

另一种表达方式是说它忽略了对象末尾的(潜在的)换行符。这就是为什么您从未看到文件名实际上是 SVNFolders.txt\n 的原因。

在解决问题时,您可以使用 p 而不是使用 puts。两者之间非常简短的比较是 puts 调用 to_s 并添加换行符,而 p 调用 inspect物体。以下是有关差异的更多详细信息:http://www.garethrees.co.uk/2013/05/04/p-vs-puts-vs-print-in-ruby/

关于ruby - 没有这样的文件或目录@rb_sysopen ruby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44678437/

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