我想在ruby中打印出一个CSV文件,但我希望将其格式化。有没有办法在层次结构意义上格式化数据?这是我需要经历的列表的一小部分:
,"11: Agriculture, Forestry, Fishing and Hunting",,
,,"111: Crop Production",
,,,"111110: Soybean Farming"
,,,"111120: Oilseed (except Soybean) Farming"
,,,"111130: Dry Pea and Bean Farming"
,,,"111140: Wheat Farming"
,,"112: Animal Production",
,,,"112111: Beef Cattle Ranching and Farming"
,,,"112112: Cattle Feedlots"
,,,"112120: Dairy Cattle and Milk Production"
,,,"112130: Dual-Purpose Cattle Ranching and Farming"
我的代码是:
require 'csv'
col_data = []
CSV.foreach("primary_NAICS_code.txt") {|row| col_data << row}
puts col_data
这只是打印出来的一切。它是一个数组中的数组吗?类似的东西:
CSV.foreach do |row|
row.each do |line|
puts line
end
end
任何帮助都会指引我朝着正确的方向前进。
我希望将信息格式化为以下内容:
|_ <~~ row 1 column 1
| |__<~ row 1 column 2
| | |__<~row 2 column 2
| | | |__
| | | | |__ etc...
| | | | | |__
答案 0 :(得分:4)
由于您的数据已经缩进,您只需转换/格式化它。这样的事情应该有效:
col_data.each do |row|
indentation, (text,*) = row.slice_before(String).to_a
puts indentation.fill("|").join(" ") + "_ " + text
end
<强>输出:强>
|_ 11: Agriculture, Forestry, Fishing and Hunting
| |_ 111: Crop Production
| | |_ 111110: Soybean Farming
| | |_ 111120: Oilseed (except Soybean) Farming
| | |_ 111130: Dry Pea and Bean Farming
| | |_ 111140: Wheat Farming
| |_ 112: Animal Production
| | |_ 112111: Beef Cattle Ranching and Farming
| | |_ 112112: Cattle Feedlots
| | |_ 112120: Dairy Cattle and Milk Production
| | |_ 112130: Dual-Purpose Cattle Ranching and Farming
答案 1 :(得分:3)
col_data
的格式为
[[nil,"11: Agriculture, Forestry, Fishing and Hunting",nil,nil], [nil,nil,"111: Crop Production",nil],[nil,nil,nil,"111110: Soybean Farming"], ...]
因此,如果你想构建这样的结构,我建议迭代数组,然后迭代值,当数据为nil时,再做一个间距。
col_data.map! do |row|
row.map do |data|
data.nil? ? " " : data
end.join('')
end
puts col_data.join("\n")
当然,你可以用其他方式做间距:)