0

我有以下测试数据,需要使用 ruby​​ 编程导出为我想要的输出中显示的格式。真实数据数组有 1000000 条记录。

data_array1=aaaa
data_array2=bbbb
----------------
----------------
data_array8=hhhh , which means there are 8 data array, those have the following format :

aaaa= [a,[1,2,3,4],20]
bbbb= [b,[8,7,9,19],23]
-----------------------
-----------------------
hhhh= [h,[25,26,29,30],28]

我想要的输出需要导出到文本文件(标题仅供参考,无需包含在输出文件中):

输出.txt

哈希发送时间

a    1    20
a    2    20
a    3    20
a    4    20
b    8    25
b    7    25
b    9    25
b    19   25
------------
------------
h    25   28
h    26   28
h    29   28
h    30   28

我是 Ruby 的新手,到目前为止我已经这样做了,但尚无定论:

def bhash
  1.upto(8) do |bid|
    blk=[bid]

    keys = %w[hash tx time ]
    data = keys.map{|key| blk[key]}

    hash, txids, time, difficulty = data
    CSV.open('output.txt', 'w', headers: keys, write_headers: true, col_sep: 
    "\t") do |csv|
    txids.each do |tx|
      csv << [hash,tx,time]
    end
  end
end 

提前感谢您的所有帮助。

4

1 回答 1

0

给定一个json.txt包含以下内容的文件:

["a",[1,2,3,4],20]
["b",[8,7,9,19],23]
["h",[25,26,29,30],28]

以下程序:

require 'csv'
require 'pp'
require 'json'

def custom_expansion(a)
  expanded = Array.new
  h = Hash.new
  h['hash'] = a[0]
  h['time'] = a[2]
  inside = a[1]
  inside.each do |tx|
    h['tx'] = tx
    expanded.push h.dup
  end
  expanded
end

CSV.open('output.txt', 'w', col_sep: "\t") do |csv|
  File.open('json.txt') do |f|
    while !f.eof?
      array = JSON.parse(f.readline)
      ex = custom_expansion(array)
      ex.each do |e|
        csv << [ e['hash'], e['tx'], e['time'] ]
      end
    end
  end
end

将在output.txt

a   1   20
a   2   20
a   3   20
a   4   20
b   8   23
b   7   23
b   9   23
b   19  23
h   25  28
h   26  28
h   29  28
h   30  28
于 2018-05-31T04:02:26.397 回答