有没有 Ruby 工具可以让我加载格式为 (Abbreviated => Abr) 的缩写文件?然后我需要从另一个文件中读取每个单词。如果单词与缩写中的单词匹配,我需要将其更改为缩写词。我想我可以使用哈希,但我不知道如何从文件加载它。
最佳答案
YAML是一种非常通用的数据存储格式,可以在应用程序和编程语言之间传输。 JSON是另一种替代方法,这在网站中很常见。
我将 YAML 用于配置文件之类的内容,因为它非常容易读取和修改。例如,这个 Ruby 结构:
irb(main):002:0> foo = { 'a' => 1, 'b' => [2, 3], 'c' => { 'd' => 4, 'e' => 5 } }
{
"a" => 1,
"b" => [
[0] 2,
[1] 3
],
"c" => {
"d" => 4,
"e" => 5
}
}
转换为 YAML 时看起来像这样:
irb(main):003:0> puts foo.to_yaml
---
a: 1
b:
- 2
- 3
c:
d: 4
e: 5
您可以将其保存到文件中:
File.open('foo.yaml', 'w') { |fo| fo.puts foo.to_yaml }
并读回:
bar = YAML.load_file('foo.yaml')
{
"a" => 1,
"b" => [
[0] 2,
[1] 3
],
"c" => {
"d" => 4,
"e" => 5
}
}
同样,使用 JSON:
puts foo.to_json
{"a":1,"b":[2,3],"c":{"d":4,"e":5}}
您可以像使用 YAML 一样将 JSON 保存到文件中,然后重新加载它并将其转回哈希。虽然语法有点不同:
irb(main):011:0> File.open('foo.json', 'w') { |fo| fo.puts foo.to_json }
nil
irb(main):012:0> bar = JSON.parse(File.read('foo.json'))
{
"a" => 1,
"b" => [
[0] 2,
[1] 3
],
"c" => {
"d" => 4,
"e" => 5
}
}
任何一种语言的最大胜利是可以读取 YAML 或 JSON 的任何语言都可以读取这些文件并使用数据,无论是读取还是写入。
一旦有了散列,字符串替换就非常容易了,因为 Ruby String 的 gsub
理解散列。这是来自 the docs :
If the second argument is a Hash, and the matched text is one of its keys, the corresponding value is the replacement string.
这意味着你可以这样做:
foo = 'Jackdaws love my giant sphinx of quartz'
bar = { 'quartz' => 'rosy quartz', 'sphinx' => 'panda' }
foo.gsub(Regexp.union(bar.keys), bar)
"Jackdaws love my giant panda of rosy quartz"
在进行替换时您确实需要注意字边界冲突,但是模式中的 \b
标志可能会有所帮助。让这项工作成为读者的练习。
关于ruby - 如何从文件加载哈希?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10305626/