在Ruby中比较字符串与文件中的字符串

在Ruby中比较字符串与文件中的字符串,ruby,Ruby,My data.txt中也填充了“hello”,因此if循环应该处于活动状态,但它没有。我做错了什么?从文件中读取数据时,很可能会在数据的末尾标记一条换行符 例如,如果我在终端中运行以下命令以创建仅包含单词“hello”的文件: data = File.read("data.txt") if(data.to_s.eql? "hello") ... end 在终端上读到这个,我明白了: echo hello > data.txt 然而,跳入irb,我得到以下信息: cat da

My data.txt中也填充了“hello”,因此if循环应该处于活动状态,但它没有。我做错了什么?

从文件中读取数据时,很可能会在数据的末尾标记一条换行符

例如,如果我在终端中运行以下命令以创建仅包含单词“hello”的文件:

data = File.read("data.txt")
if(data.to_s.eql? "hello")
  ...   
end
在终端上读到这个,我明白了:

echo hello > data.txt
然而,跳入
irb
,我得到以下信息:

cat data.txt
# => hello
\n
是换行符

要解决您的问题,您可以使用:

File.read("data.txt")
# => "hello\n"
从字符串的末尾删除任何记录分隔符,以便进行比较

如果您只想知道文件是否包含指定的字符串,还可以使用:

if data.chomp == "hello"
  ...   
end
这将返回方括号中的真实值(如果存在),或
nil
如果不存在

data['hello']

文件中的数据可能包含尾随的换行符。执行
p data
,您将看到。另外,在样式方面,您的括号是。。。不寻常。要么做
如果data.to_.eql?(“你好”)
(我会做的)要么根本没有括号(这里不需要括号)@SergioTulentsev如果你做
字符串35; to#u.eql?
@穆达索布瓦:你知道我的意思。:)评论只涉及括号。修复其他问题超出范围。
data.chomp.eql?“你好”#=>true
顺便说一句,触摸文件是不必要的。至少在我的机器上是这样。@SergioTulentsev,在任何地方都不需要(Ubuntu、Windows等)
if data["hello"]
  ...   
end