(Abbreviated => Abr)の形式で略語のファイルをロードできるRubyツールはありますか?次に、別のファイルから各単語を読み取る必要があります。単語が略語の単語と一致する場合、私はそれを略語に変更する必要があります。ハッシュは使えると思いますが、ファイルからロードする方法がわかりません。
3 に答える
YAMLは、アプリとプログラミング言語間で転送できる方法でデータを保存するための非常に普遍的な形式です。JSONは別の代替手段であり、Webサイトで非常に一般的です。
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
理解するため、ハッシュを取得すると、文字列の置換を非常に簡単に行うことができます。これはドキュメントからです:
2番目の引数がハッシュであり、一致したテキストがそのキーの1つである場合、対応する値は置換文字列です。
これは、次のようなことができることを意味します。
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を介して読み取り/保存することもできます。
ハッシュを自分でロードする方法を調べた後、この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は、私が所属しているクラスです。例としてPeopleを使用しましょう。
ロード方法は次のとおりです
def load_collection(file_path)
hash_values = self.class.load_hash(file_path)
@collection.insert_many(hash)
end
バインディングの内側.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ファイルを渡しました。次に、そのデータをコレクションに挿入します。