3

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... 
| |  |  |  |  |__
4

2 に答える 2

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
于 2013-10-10T14:28:19.290 に答える
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")

もちろん、他の方法でスペーシングを行うこともできます:)

于 2013-10-10T14:23:55.117 に答える