是否有Ruby工具可以讓我以(縮寫=> Abr)的格式加載縮寫文件?然後我需要從另一個文件中讀取每個單詞。如果單詞與縮寫詞匹配,我需要將其改爲縮寫詞。我想我可以使用哈希,但我不知道如何從文件加載它。Ruby:如何從文件加載哈希?
回答
YAML是一種非常通用的格式,用於以可在應用程序和編程語言之間傳輸的方式存儲數據。 JSON是另一種替代方法,這在網站中很常見。
我使用YAML來配置文件,因爲它非常容易讀取和修改。例如,這個紅寶石結構:
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
}
}
Similarl Y,使用JSON:
puts foo.to_json
{"a":1,"b":[2,3],"c":{"d":4,"e":5}}
您可以將JSON保存到一個文件就像你使用YAML然後重新裝入,並把它放回哈希值。這是一個有點不同的語法,但:
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:
如果第二個參數是散列,並且匹配的文本是它的鍵中的一個時,相應的 值是替換字符串。
這意味着你可以做這樣的事情:
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
標誌圖案能有所幫助。開展這項工作對讀者來說是一個練習。
參見Marshal.load
和Marshal.dump
。
此外,您可以查看序列化散列到yaml文件,然後通過YAML讀取/保存回去。
'Marshal'格式是(或可能)特定於正在使用的Ruby版本,當版本不匹配時沒有(理智)的方式來讀取'Marshal'數據。這使它成爲串行化到磁盤的不好的格式。 – 2016-01-22 04:11:04
我發現這個http://www.rubydoc.info/gems/bosh-director/1.1868.0/Bosh%2FDirector%2FConfig.load_hash 查找後如何加載哈希自己。
我的例子是在Rails應用中處理MongoDB的時候。
所以我設置了一個Initialize方法來獲取我將要使用的集合。這裏
def initialize @collection = self.class.collection end
self.class是我在這個類。讓我們使用人作爲一個例子。
的負載方法如下
def load_collection(file_path)
hash_values = self.class.load_hash(file_path)
@collection.insert_many(hash)
end
一個binding.pry
[1] pry(#<People>)> file_path
=> "people_results.json"
[2] pry(#<People>)> hash
=> [{"number"=>0, "first_name"=>"SHAUN", "last_name"=>"JOHNSON", "gender"=>"M", "group"=>"15 to 19", "secs"=>1464}, {"number"=>1, "first_name"=>"TUAN", "last_name"=>"JOHNSON", "gender"=>"M", "group"=>"masters", "secs"=>3994}, {"number"=>2, "first_name"=>"EARLINE", "last_name"=>"BROWN", "gender"=>"F", "group"=>"masters", "secs"=>1415}...
[3] pry(#<People>)> self
=> #<People:0x007fc80301b5f8 @coll=#<Mongo::Collection:0x70248510355560 namespace=test.people>>
[4] pry(#<People>)> self.class
=> People
因此,在這種情況下,load_hash
方法需要一個參數內,並且在這種情況下,我以JSON傳遞文件中包含一些數據。然後我將這些數據插入到我的集合中。
- 1. JSON文件到Ruby哈希
- 2. Ruby on Rails的哈希從
- 3. 從sha512哈希加密文件?
- 4. Ruby Hash.new vs哈希文字
- 5. Ruby - 將文件解析爲哈希
- 6. 如何從哈希
- 7. C# - 使用Linq從XML文件加載哈希集字典
- 8. 從文件加載的哈希和比較
- 9. 如何從哈希追加值使用Ruby
- 10. Ruby哈希 - 如何在填充對象時使用哈希值?
- 11. Ruby哈希排列
- 12. 如何將yaml文件解析爲ruby哈希和/或數組?
- 13. 如何重建哈希在Ruby中
- 14. 如何從Python中的.txt文件生成checksum.dat哈希文件
- 15. Ruby:添加哈希/合併YAML對象
- 16. 從密鑰在Ruby哈希訪問值
- 17. 如何訪問carrierwave的文件哈希
- 18. 如何從文本文件創建MD5哈希摘要?
- 19. 如何哈希
- 20. Ruby訪問深度哈希
- 21. Ruby on Rails - 傳遞哈希
- 22. Vim Ruby哈希縮進
- 23. 在Ruby中複製哈希
- 24. 快速Ruby哈希訪問
- 25. Json(/哈希)以ruby對象?
- 26. Ruby哈希bug幫助!
- 27. Ruby on Rails的哈希
- 28. 在Ruby中解釋哈希
- 29. 在Ruby中哈希顛倒?
- 30. 在Ruby中操作哈希
儘管這是一個很好的解釋,但我認爲引入yaml或json只會使一個簡單的練習複雜化。該文件已經存在,並且已經儘可能簡單 - 分隔文本文件,每行一個記錄。只需按行讀取文件,將其拆分並構建散列。 – Jim 2012-04-25 22:02:18
謝謝!它現在工作完美。 – user1128637 2012-04-26 19:15:35