0

次のデータを含む CSV データ ファイルがあります。

id,account_number,balance,date
1,ar161429,482.29,11/28/2007 15:54
2,ar182364,266.93,10/9/2007 15:54
3,ar106644,887.78,10/23/2007 15:54

日付と口座番号の配列を作成し、日付をさらに日、月、年に分解しようとしています。「、」に基づいてデータを分割し、アカウントと日付の配列を作成できましたが、日付を月と日に分割しようとすると機能しません。これが私のコードです:

class Account
 puts "Please Enter the name of account file in .txt format"
 balance_file = gets.chomp

 @number_lines = File.read(balance_file).scan(/\n/).count
 @number_lines = @number_lines - 1


 File.open(balance_file) do |aFile|
   @@balance = []
   @@balance_due = []
   @@balance_due_day = []
   @@balance_due_month =[]
   @@balance_due_year = []

   aFile.each_line do |line|
     @@balance << line.split(",").values_at(2)
     @@balance_due << line.split(",").values_at(3)
     puts @@balance_due

   end


   i = 1
   begin
     @@balance_due_day[i] =  @@balance_due[i].split("/").values_at(0)
     @@balance_due_month[i] = @@balance_due[i].slice!(3,2)

     i +=1
   end    while i<@number_lines
 end
end
4

3 に答える 3

1

さて、伝えるべき多くのこと:

まず、 でslice!終わる!ため、ほとんどの bang メソッドと同様に、新しいオブジェクトを返すだけでなく、オブジェクト自体を変更することを意味します。コンソールでの例:

> a = [1,2,3]
 => [1, 2, 3] 
> a.slice(2,3)
 => [3] 
> a
 => [1, 2, 3] # didn't modified a
> a.slice!(2,3)
 => [3] 
> a
 => [1, 2]  # modified a

while第二に、リストをループするために使用しないでください。それぞれを使用するだけです(もちろん使用できます。複数行の操作doend場合:

[1,2,3].each{|x| p x}
1
2
3

第三に、double で始まる変数は、@あなたが考えているものであってはなりません。それらは頻繁には使用されません。それについて読むことをお勧めします。

日付抽出ロジックの問題点を確認するには、Ruby ターミナル (コマンドはirb) を開くことをお勧めします。次に、いくつかの行を入力します。たとえば、

> a_date = a_date.split("/").values_at(0)
 => ["11"] 
> a_date = a_date.slice!(3,2)
 => nil

出力として何を望んでいたかについて 100% 確信があるわけではないので、修正はしませんが、ここで問題を確認できると思います。

楽しいハッキング

于 2013-09-06T03:08:24.973 に答える
0
string = <<_
id,account_number,balance,date
1,ar161429,482.29,11/28/2007 15:54
2,ar182364,266.93,10/9/2007 15:54
3,ar106644,887.78,10/23/2007 15:54
_

string.sub(/^.*$/, "").scan(%r{^[^,]*,([^,]*),[^,]*,([^/]*)/([^/]*)/(\S*)\s+.*$})
# => [
#      ["ar161429", "11", "28", "2007"],
#      ["ar182364", "10", "9", "2007"],
#      ["ar106644", "10", "23", "2007"]
#    ]
于 2013-09-06T04:13:41.347 に答える