Projeto: Vermelho

logs of development
<< csvファイルを読み込み並べ替えるプログラム(userを入れる) | main | 起動時画面で「ata1:port failed to respond」 >>
スポンサーサイト

一定期間更新がないため広告を表示しています

| - | | - | -
csvファイルを読み込み並べ替えるプログラム(新規ユーザを抽出)
csvファイルを読み込み並べ替えるプログラム(userを入れる)に、新規登録者を抽出しファイルに出力するコードを追加する。
#☆ ☆ ☆

hshMonth = Hash.new
hshNumber = Hash.new
hshNumberNow = Hash.new
arrMonth = Array.new
arrNumber = Array.new
arrNumberNow = Array.new

open("list_cellphone-ed.csv", "r") do |list|
i = 0
while line = list.gets
if /¥d*,(¥S+),(0?)(¥d0)(-?)(¥d¥d¥d¥d)(-?)(¥d¥d¥d¥d).*/ =~ line
key = $3.to_s + $5.to_s + $7.to_s
arrNumberNow[i] = key
hshNumberNow[key] = $1.to_s
i += 1
end
end
end

#電話番号と月の内容を配列に取り出す
open("cellcost.csv", "r") do |f|
i = 0
# puts "¥n" + "電話番号と月との組み合わせをすべて表示する"
while line = f.gets
if /(¥d+),(¥S+),(¥d+)/ =~ line
arrMonth[i] = $1.to_i
arrNumber[i] = $2.to_s
print arrNumber[i], "と", arrMonth[i], "¥n"
end
i += 1
end
end

#電話回線と月の重複を削除する(降順に破壊的sort)
arrMonthUniq = arrMonth.uniq
arrMonthUniq.sort!
arrNumberUniq = arrNumber.uniq
arrNumberUniq.sort!

#電話回線と月とのそれぞれの最大数を取り出す
arrNumberSize = arrNumberUniq.size
arrMonthSize = arrMonthUniq.size

#重複整理後:hashのバグ回避のため、電話番号と月とをkeyとする月ハッシュを生成し、それをvalueとする電話番号ハッシュの生成する
puts "¥nハッシュテーブルを表示"
arrNumberUniq.each do |d|
hshMonth = Hash.new
arrMonthUniq.each do |q|
month = d.to_s + "_" + q.to_s
hshMonth[month] = 0
end
hshNumber[d] = hshMonth
end
p hshNumber

#必要数を表示する
puts " "
puts '何ヶ月の表示をしますか?:'
puts arrMonthSize.to_s + 'ヶ月です'
puts '最大で何回線ありますか?:'
puts arrNumberSize.to_s + '回線です'

#電話番号ハッシュのvalueにコストを挿入する
puts "¥nコストを組込みます"
open("cellcost.csv", "r") do |list|
while line = list.gets
line.chomp!
if /(¥d+),(¥S+),(¥d+)/ =~ line
printf("%3d %s¥n", list.lineno,line)
monthOrigin = $2.to_s + "_" + $1.to_s
number = $2.to_s
cost = $3.to_i
costNow = hshNumber[number][monthOrigin]
if costNow != 0
next
else
printf("$2は%s,$1は%d¥n", number, $1)
hshNumber[number][monthOrigin] = cost
end
end
end
end

puts "¥n" + "ハッシュのkeyとvalueをすべて表示する"
p hshNumber

puts "¥nファイルに出力します"
open("result/cellcostfinal.csv", "w") do |final|
final.print "#,user"
arrMonthUniq.each do |p|
final.print ",", p.to_s
end
final.print ",Taihi¥n"
arrNumberUniq.each do |num|
arrCost = Array.new
arrCost[0] = num
arrNumberNow.each do |z|
if /(0?)(¥d0)(-?)(¥d¥d¥d¥d)(-?)(¥d¥d¥d¥d)/ =~ num
if z == $2.to_s + $4.to_s + $6.to_s
nowuser = hshNumberNow[z]
arrCost.push(nowuser)
break
end
end
end
arrMonthUniq.each do |q|
month = num.to_s + "_" + q.to_s
costFinal = hshNumber[num][month]
arrCost.push(costFinal)
end
taihi = arrCost[-1] - arrCost[-2]
arrCost.push(taihi)
arrCost.each do |costTrue|
if costTrue != nil
final.print costTrue.to_s, ","
end
end
final.print "¥n"
end
end

arrNumberCurrent = Array.new
puts "I am special man."
arrNumberUniq.each do |n|
if /0?(¥d0)-?(¥d¥d¥d¥d)-?(¥d¥d¥d¥d)/ =~ n
currentNumber = $1.to_s + $2.to_s + $3.to_s
else
next
end
if n == arrNumberUniq[0]
arrNumberCurrent[0] = currentNumber
else
arrNumberCurrent.push(currentNumber)
end
end
p arrNumberCurrent

open("result/list_newCellphone.csv", "w") do |list|
list.print "#,user¥n"
newNumber = arrNumberNow - arrNumberCurrent
newNumber.each do |p|
nowuser = hshNumberNow[p]
list.print p, ",", nowuser, "¥n"
end
end
| Pg_Ruby_Coding | 14:14 | comments(0) | -
スポンサーサイト
| - | 14:14 | - | -
コメント
コメントする









PROFILE
CATEGORIES
LINKS
CALENDAR
S M T W T F S
    123
45678910
11121314151617
18192021222324
252627282930 
<< June 2017 >>
SELECTED ENTRIES
ARCHIVES
モバイル
qrcode
SPONSORED LINKS