0

2 つのテキスト ファイルがあり、同じフィールド (ペット) が 1 つあります。2 つのファイルを結合し、3 つのフィールド (所有者、ペット、購入者) を含む新しいファイルを出力したいと考えています。私のコードは主に、新しいファイルのバイヤーのフィールドにバイヤーの名前を追加するよりも、両方のファイルが同じペット (名前とペットの数) を持っているかどうかに依存します。2 つのファイルに同じペットのフィールドがある場合にのみ印刷されます。

しかし、私のコードは思い通りに機能しませんでした。助けが必要です。ありがとう。

入力ファイル_1 (.txt)

owner pet
Michael dog, cat
John pig, rabbit
Marry dog, cat

入力ファイル_2 (.txt)

buyer pet
Sean cat, dog
Mark cat, dog
Joy dog, mouse
Tina cat, dog

結果を次のようにしたい:

owner pet buyer
Michael cat, dog Sean, Mark, Tina
Mary cat, dog Sean, Mark, Tina

私のコードは次のようになります。

input_file_1 = ARGV[0]
input_file_2 = ARGV[1]

hash_1 = {}
File.readlines(input_file_1, "\n").each do |line|
  owner, pet = line.chomp.split("\t")
  hash_1[owner] = pet
end

hash_2 = {}
File.readlines(input_file_2, "\n").each do |line|
  buyer, pet = line.chomp.split("\t")
  hash_2[buyer] = pet
end

hash_1.each do |key, value|
  if hash_2.has_value? value
    puts "#{key}\t#{value}\t#{hash_2[key]}"
  end
end
4

1 に答える 1

0

petasキーを使用することをお勧めします:

input_file_1 = ARGV[0]
input_file_2 = ARGV[1]

hash_1 = Hash.new([])
File.readlines(input_file_1, "\n").each do |line|
  owner, pet = line.chomp.split("\t")
  hash_1[pet] += [owner]
end

hash_2 = Hash.new([])
File.readlines(input_file_2, "\n").each do |line|
  buyer, pet = line.chomp.split("\t")
  hash_2[pet] += [buyer]
end

hash_1.each do |pet, owners|
  if hash_2.include? pet
    owners.each do |owner|
      puts "#{owner}\t#{pet}\t#{hash_2[pet].join(", ")}"
    end
  end
end
于 2014-02-06T09:38:19.000 に答える