3

yaml(PHPMyAdmin)のMysqlダンプからデータを取得したいのですが、データが引用符で囲まれていません。

0から開始できる郵便番号があり、解析後、単純な文字列の代わりに8進数値の10進数バージョンを取得します。

Yamlパーサーに自動マッピングを行わないように強制したり、文字列であるためすべてのデータを取得したりするにはどうすればよいですか?

ありがとう

==更新==

2185:
 id: 3274  
 civility: Mr  
 address: CROIX DES COMBES  
 zipcode: 04270
4

1 に答える 1

5

郵便番号の値が文字列であり、おそらくデータベースにあるはずであり、YAMLに正しく変換されている場合、RubyのYAMLパーサーによって文字列に再変換されます。

require 'yaml'
zip = '01234'

文字列として扱うと、正しく変換されます。

zip.to_yaml # => "--- \"01234\"\n"
YAML.load(zip.to_yaml) # => "01234"

これを整数として扱うと、先頭0が削除されます。これは予想どおりです。

zip.to_i.to_yaml # => "--- 1234\n"
YAML.load(zip.to_i.to_yaml) # => 1234

サンプルでは:

zipcode: 04270

zipcodeYAML整数です。「文字列性」を維持するために、引用符で囲む必要があります。

ウィキペディアのYAML記事には、データ型がどのように明確化されるかを示す良い例があります。


YAMLのすべてのインスタンスを微調整してから、zipcode次のように解析できます。

require 'yaml'

yaml_data = '2185:
 id: 3274  
 civility: Mr  
 address: CROIX DES COMBES  
 zipcode: 04270
'

yaml_data.gsub(/zipcode: (\d+)/, 'zipcode: "\1"') 
# => "2185:\n id: 3274  \n civility: Mr  \n address: CROIX DES COMBES  \n zipcode: \"04270\"\n"

YAML.load(yaml_data.gsub(/zipcode: (\d+)/, 'zipcode: "\1"')) 
# => {2185=>{"id"=>3274, "civility"=>"Mr", "address"=>"CROIX DES COMBES", "zipcode"=>"04270"}}
于 2012-05-31T09:22:05.720 に答える