-1

を含む XML ファイルがあり<pb n="4-DIGIT-NUMBER" ... />ます。数は場合によっては同一であるため、曖昧さをなくしたいと思いますが、今のところカウントの問題があります (正しいアプローチがありますか? => 3))

1) すべての数値を配列に読み込み、非常に長いリストを生成します:

Dir.chdir("./Tustep/luxneu")
sammel = []
open("lp42tags.txt").each do |x|
  if x =~ /<pb n="(\d\d\d\d)/
  sammel << $1
  end
end

2) 繰り返し数を見つけてサブ配列に入れる

dupl_groups = sammel.select{|i| sammel.grep(i).size > 1}.group_by{|x| x}.values
p dupl_groups
# (much shorter example)=> [["0119", "0119"], ["0147", "0147"], ["0156", "0156", "0156"]]

3)今、私はどうにかして各サブ配列の要素を数えて、それらを(またはコピーに..)戻すことができると思いました。たとえば、[["0119:1", "0119:2"], [...], ["0156:1", "0156:2", "0156:3"] が必要です。ほとんど無限の数値計算で陽気なループを取得しました... :/)

dupl_counted = []
dupl_groups.each do |outer|
  count = 1
  dupl_groups do |inner|
    #puts inner.inspect
    inner_new = inner.to_s.sub(/(.+)/, "\\1:#{count}")
    dupl_counted << inner_new
    count += count
  end
end

深刻な欠陥..?「each_with_index」を使用する代わりに何か?また、意味のあるチャンクでカウントするためのグループが必要です (2 ~ 6 の範囲の数の繰り返しがあるため、スライス 3 程度は受け入れられません)。配列をサブ配列に分割して、それらをすべて通常の配列として生成できれば、それでよいでしょうか?

前もって感謝します!ルネ T.

4

1 に答える 1

0

mapこれは、外側のグループに 1 回、次に内部の各要素に -のネストされたアプリケーションである必要があります。

dupl_groups.map do |gp| 
  gp.map.with_index {|el, ix| el + ":#{ix+1}"}
end
# => [["0119:1", "0119:2"], ["0147:1", "0147:2"], ["0156:1", "0156:2", "0156:3"]]
于 2012-12-17T10:29:31.797 に答える