对于一个小东西,我想将一些信息存储在一个文件中并以这种方式从中读取,我最后有一个二维数组.
假设这是配置文件的内容:
Banana:Yellow
Apple:Red
Run Code Online (Sandbox Code Playgroud)
这是我提出的代码:
a = File.read("config.txt")
b = a.split("\n")
k = Array.new
b.each { |x| k.push(x.split(":"))}
print k
Run Code Online (Sandbox Code Playgroud)
它有效,但肯定有更好的方法来做到这一点?
您可以使用IO::readlines和执行以下操作String#splt
File.readlines("config.txt").map { |str| str.split(":") }
Run Code Online (Sandbox Code Playgroud)
或者,使用 CSV::read
require 'csv'
CSV.read("path/to/file", 'rb', :col_sep => ':')
# => [["Banana", "Yellow"], ["Apple", "Red"]]
Run Code Online (Sandbox Code Playgroud)
使用CSV,您可以跳过不想使用选项处理的行:skip_lines:
当设置为响应匹配的对象时,与其匹配的每一行都被视为注释,并在解析期间被忽略.设置为String时,首先将其转换为Regexp.设置为nil时,不将任何行视为注释.如果传递的对象没有响应匹配,则抛出ArgumentError.
假设我有一个test.txt内容为: - 的文件
Banana:Yellow
Apple:Reds
#foo:biz
bar:cz
Run Code Online (Sandbox Code Playgroud)
现在我不想读取以...开头的行#.然后我会重新编写代码
require 'csv'
CSV.read("#{__dir__}/test.txt", 'rb', :col_sep => ':',:skip_lines => /\A#/)
Run Code Online (Sandbox Code Playgroud)
让我们运行代码并查看它的作用:
arup@linux-wzza:~/Ruby> ruby test.rb
[["Banana", "Yellow"], ["Apple", "Reds"], ["bar", "cz"]]
arup@linux-wzza:~/Ruby>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
681 次 |
| 最近记录: |