6

(Abbreviated => Abr)の形式で略語のファイルをロードできるRubyツールはありますか?次に、別のファイルから各単語を読み取る必要があります。単語が略語の単語と一致する場合、私はそれを略語に変更する必要があります。ハッシュは使えると思いますが、ファイルからロードする方法がわかりません。

4

3 に答える 3

24

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、パターン内のフラグが役立つ場合があります。その仕事をすることは読者のための練習です。

于 2012-04-24T22:17:36.870 に答える
8

Marshal.loadおよびを参照してくださいMarshal.dump

また、ハッシュをyamlファイルにシリアル化してから、YAMLを介して読み取り/保存することもできます。

于 2012-04-24T20:39:52.673 に答える
0

ハッシュを自分でロードする方法を調べた後、この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ファイルを渡しました。次に、そのデータをコレクションに挿入します。

于 2016-01-22T03:44:29.897 に答える