0

test1.csv

yearID,teamID,lgID,playerID,salary
1985,BAL,AL,boddimi01,625000
1985,BAL,AL,dauerri01,480000
1985,BAL,AL,davisst02,437500
1986,BAL,AL,dempsri01,512500
1986,BAL,AL,dwyerji01,375000
1987,BAL,AL,flanami01,641667

これは私のルビーコードです!

File.foreach('test1.csv') do |csv_line|
    row = CSV.parse_line(csv_line)
    
    if File.exist?("year_#{row[0]}_info.csv")
        File.open("year_#{row[0]}_info.csv", 'w') do |f|     
            f.write("\n#{row[4]}")   
        end
    else
        File.open("year_#{row[0]}_info.csv", 'w') do |f|     
            f.write("#{row[4]}")   
        end
    end
end

次の出力のいずれかを取得しようとしています

#year_1985_info.csv
625000
480000
437500

しかし、私はこの出力しか得ていません

#year_1985_info.csv

437500

目的の出力を得るにはどうすればよいですか?

よろしくお願いします!

4

3 に答える 3

2

「追加」モードでファイルを開く必要があります。このような:

File.open("year_#{row[0]}_info.csv", 'a')

「あ」に注目。

于 2013-04-19T01:23:50.737 に答える
1

ファイルが存在する場合は、空のファイルを作成するのではなく、ファイルに追加します。

require 'csv'

File.foreach('test1.csv') do |csv_line|
  row = CSV.parse_line(csv_line)

  ofname = "year_#{row[0]}_info.csv";
  if File.exist?(ofname)
    File.open(ofname, 'a') do |f|       # Note the 'a' here
      f.write("\n#{row[4]}")
    end
  else
    File.open(ofname, 'w') do |f|
      f.write("#{row[4]}")
    end
  end
end

実際には、すべての行の終わりに改行を入れる方が良いと思います。これにより、CSV ファイルの操作が容易になります。また、コードを簡素化します。

require 'csv'

File.foreach('test1.csv') do |csv_line|
  row = CSV.parse_line(csv_line)

  File.open("year_#{row[0]}_info.csv", 'a') do |f|
    f.write("#{row[4]}\n")
  end
end

'a'実際には、作成または追加には問題ないことに注意してください。

于 2013-04-19T01:37:06.307 に答える