Массив данных переносится в хэш-значения и экспортирует ключи в выходной файл - PullRequest
0 голосов
/ 31 мая 2018

У меня есть следующие тестовые данные, которые нужно экспортировать в формат, показанный в моем желаемом выводе с программированием 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]

Мой желаемый выход необходимо экспортировать в текстовый файл (заголовки только для справки, не нужно включать его в выходной файл):

output.txt

hash tx time

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 

Заранее благодарен за всю вашу помощь.

1 Ответ

0 голосов
/ 31 мая 2018

Имеется файл 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...