如何用Ruby将不等长数组数据导出为指定格式的文本文件?
Ruby 数据导出到文本文件解决方案
单个数据组的处理
你的问题出在原来的代码没有处理Data里的嵌套数组——直接用join会把整个嵌套数组当成一个字符串输出,自然得不到你要的展开效果。我们需要遍历No对应的数组,逐个生成每行数据:
keys = %w[ID No time] Data = ["a", ["1", "2", "3", "4"], 20] File.open('test1.txt', 'w') do |f| # 先写入表头行 f.puts keys.join(' ') # 解构Data里的三个值:ID的固定值、No的数组、time的固定值 id_val, nos, time_val = Data # 遍历每个No值,拼接成一行写入文件 nos.each do |no| f.puts [id_val, no, time_val].join(' ') end end
运行这段代码后,test1.txt的内容就会完全符合你的期望:
ID No time a 1 20 a 2 20 a 3 20 a 4 20
多组数据的扩展处理
如果有多个类似的Data1、Data2、Data3,我们可以把它们放到一个数组里统一遍历处理,这样代码更简洁易维护:
keys = %w[ID No time] # 定义多组数据 Data1 = ["a", ["1", "2", "3", "4"], 20] Data2 = ["b", ["5", "6"], 30] Data3 = ["c", ["7"], 40] # 把所有数据组放进一个数组里 all_datasets = [Data1, Data2, Data3] File.open('test_multiple.txt', 'w') do |f| # 表头只写一次(如果需要每个数据组都带表头,把这行移到下面的each循环里即可) f.puts keys.join(' ') # 遍历每个数据组 all_datasets.each do |data| id_val, nos, time_val = data nos.each do |no| f.puts [id_val, no, time_val].join(' ') end end end
这段代码会生成包含所有数据组内容的文件,输出格式如下:
ID No time a 1 20 a 2 20 a 3 20 a 4 20 b 5 30 b 6 30 c 7 40
内容的提问来源于stack exchange,提问作者Rubz
相关产品推荐
相关产品推荐

