ファイルを行の配列に読み込み、その行を解析して構造化データを取得するコードがあります。入力ファイルにはさまざまな異なるデータ型があり、異なる処理が必要です。さらに、さまざまなアカウント(携帯電話番号)の主要セクションがあります。なぜ/変数はゼロに設定されていますか
私はアカウント行を探している行をループし、そのアカウントを特定してから、次のアカウント行が見つかるまでそのアカウントを使用したいと考えています。その間の線は、そのアカウントに属するさまざまなタイプのデータを表す可能性があります。問題は、私がアカウントの行を見つけてローカル変数(cur_num)を設定した後、変数を使用したいときに変数をnilに設定することです。なぜ、どうしたのですか?私はRubyを学んでいるので、これ以上の修正が必要です。なぜこのように動作するのか理解したいのですが。ここで
は私のコードです:
count = 0
cur_num = ""
lines.each do |line|
unless (line.strip.eql?("")) # edited due to comment from normalocity
if (line.slice(0,15) == "Mobile Number:,")
cur_num = line.slice(15,12)
count = 1
puts "Current Number: #{cur_num}"
#puts "Object Type: #{cur_num.class}"
else
data = line.strip.split(',')
if (data.length > 8)
data.unshift(cur_num)
#if (count.modulo(10) == 0 || count == 1)
puts "[#{cur_num}] #{data.inspect}"
#pp data
#end
count += 1
end
end
end
end
入力データ構造の概要は、次のようになります。
Account 1
Data Section A
data line 1
data line 2
Data Section B
data line 1
data line 2
Account 2
Data Section A
data line 1
data line 2
Data Section B
data line 1
data line 2
end
は、行の配列を複製するコードを追加します場合は、この上記のコードサンプルを貼り付けなければなりません複製しようとしています。私は私の質問を読みやすくしようとする最後にここでそれを入れている:
lines = []
lines.push("ATT Wireless Bill")
lines.push("")
lines.push("Mobile Number:,770-555-1212")
lines.push("item,date,time,number called,rate period,plan type,minutes,airtime charge,ld charge,total charge")
lines.push("")
lines.push("1,2011-01-02,6:56AM,404-555-1212,NW,UNW,4,0.00,0.00,0.00")
lines.push("")
lines.push("2,2011-01-03,6:56AM,404-555-1212,NW,UNW,4,0.00,0.00,0.00")
lines.push("")
lines.push("1,2011-01-03,7:56AM,404-555-1213,DT,UM2M,5,0.00,0.00,0.00")
lines.push("")
lines.push("Mobile Number:,770-555-1213")
lines.push("item,date,time,number called,rate period,plan type,minutes,airtime charge,ld charge,total charge")
lines.push("")
lines.push("1,2011-01-02,6:56AM,404-555-1212,NW,UNW,4,0.00,0.00,0.00")
lines.push("")
lines.push("2,2011-01-03,6:56AM,404-555-1212,NW,UNW,4,0.00,0.00,0.00")
lines.push("")
lines.push("1,2011-01-03,7:56AM,404-555-1213,DT,UM2M,5,0.00,0.00,0.00")
lines.push("")
ただ、コードスタイルのノートを、代わりに '場合(line.strip ==「」) ELSIFを書くの... '、line.strip.eql?(" ")... 1)空のif文を削除し、2)文字列の内容を比較するために' .eql? 'メソッドを使う必要があります。 http://ruby-doc.org/core/classes/String.html#M001122 – jefflunt
「good_lines」とは何ですか?スタックの単なる実装ですか?コードが提供されていない(つまり、コードを提供していないか、それが何であるかを伝えている)わけではないため、自分の側でコードを動作させることはできません。 – jefflunt
申し訳ありません - 完全なコードを提供していないため、関連性と簡潔性を保ちます。 good_linesは私の問題には必要ではなく、カウントも必要ありません。元の投稿を編集します。 – Scott