使用Ruby

时间:2017-06-18 16:16:34

标签: ruby export-to-csv file-writing

我在Ruby中有一个数组数组,我试图输出到CSV文件(或文本)。然后,我可以轻松地转移到另一个XML文件进行绘图。

我似乎无法获得输出(文本格式)。相反,我得到一行数据只是一个大数组。

0,2
0,3
0,4
0,5

我最初尝试了一下这个

的内容
File.open('02.3.gyro_trends.text' , 'w') { |file| trend_array.each { |x,y| file.puts(x,y)}}

并输出

0.2
46558
0
46560
0
....etc etc.

任何人都可以指出我在"写"得到的方向:

(i).text文件,可以像我这样放置我的数据。

trend_array[0][0], trend_array[0][1] 
trend_array[1][0], trend_array[1][1] 
trend_array[2][0], trend_array[2][1] 
trend_array[3][0], trend_array[3][1] 

(ii).csv文件,将此数据放在不同的列中   编辑我最近在我的数组中添加了两个以上的值,请结合Cameck的解决方案查看我的答案。

这是我目前所拥有的。

trend_array=[]
j=1

# cycle through array and find change in gyro data.

while j < gyro_array.length-2

  if gyro_array[j+1][1] < 0.025 && gyro_array[j+1][1] > -0.025
    trend_array << [0, gyro_array[j][0]]
    j+=1
  elsif gyro_array[j+1][1] > -0.025  # if the next value is      increasing by x1.2 the value of the previous amount. Log it as +1
    trend_array << [0.2, gyro_array[j][0]]
    j+=1
  elsif gyro_array[j+1][1] <  0.025 # if the next value is   decreasing by x1.2 the value of the previous amount. Log it as -1
    trend_array << [-0.2, gyro_array[j][0]]
    j+=1
  end
end

#for graphing and analysis purposes (wanted to print it all as a csv  in two columns)

File.open('02.3test.gyro_trends.text' , 'w') { |file| trend_array.each { |x,y| file.puts(x,y)}}

File.open('02.3test.gyro_trends_count.text' , 'w') { |file| trend_array.each {|x,y| file.puts(y)}}

我知道这件事真的很容易,但出于某些原因,我错过了它。连接的东西,但我发现如果我尝试在我的最后一行代码中连接\\n,它就不会将它输出到文件中。它以我想要的方式在我的控制台中输出它,但不是在我将它写入文件时。

感谢您抽出宝贵时间阅读本文。

3 个答案:

答案 0 :(得分:3)

File.open('02.3test.gyro_trends.text' , 'w') { |file| trend_array.each { |a| file.puts(a.join(","))}}

答案 1 :(得分:1)

或者使用CSV Class

  def write_to_csv(row)
    if csv_exists?
      CSV.open(@csv_name, 'a+') { |csv| csv << row }
    else
      # create and add headers if doesn't exist already
      CSV.open(@csv_name, 'wb') do |csv|
        csv << CSV_HEADER
        csv << row
      end
    end
  end

  def csv_exists?
    @exists ||= File.file?(@csv_name)
  end

使用数组write_to_csv

致电[col_1, col_2, col_3]

答案 2 :(得分:0)

非常感谢@cameck&amp; @tkupari,这两个答案都是我想要的。最后找到Cameck的答案,因为它“剪掉”切割和粘贴text =&gt; XML。以下是我将数组数组放入适当位置的方法。

require 'csv'

CSV_HEADER = [
                "Apples",
                "Oranges",
                "Pears"
                        ]

@csv_name = "Test_file.csv"

def write_to_csv(row)
  if csv_exists?
    CSV.open(@csv_name, 'a+') { |csv| csv << row }
  else
    # create and add headers if doesn't exist already
    CSV.open(@csv_name, 'wb') do |csv|
      csv << CSV_HEADER
      csv << row
    end
  end
end

def csv_exists?
  @exists ||= File.file?(@csv_name)
end

array = [ [1,2,3] , ['a','b','c'] , ['dog', 'cat' , 'poop'] ]
array.each { |row| write_to_csv(row) }