簡単なグラフを生成する必要があるため、直接使用できない csv ファイルを使用する必要があります。ファイルを「よりクリーンな」ものに操作する必要があり、ルビーでファイルを解析することを学んでいるので、問題が発生し、全体的な戦略が正しいかどうかわかりません....ここでの私の問題は、主に探しているものに関連しています見つかった場所または一致が見つからなかった場所からオフセットされたデータ。基準を満たす行を見つけたら、その 2 行後の情報を読み取り、その一部を操作する必要があります (最後の列から 2 番目の列に何かを移動します)。
元の csv ファイルは次のとおりです。
component
quantity header,design1,design2,design3,Ref,Units
quantity type,#,#,#,ref#,unit value
component
quantity header,design1,design2,design3,Ref,Units
quantity type,#,#,#,ref#,unit value
component
quantity header,design1,design2,design3,Ref,Units
quantity type,#,#,#,ref#,unit value
望ましい出力:
Component Header,Quantity type Header,Units Header,design1 header,design2 header,design3 header,Ref header
component,quantity type,unit value,#,#,#,n/a
component,quantity type,unit value,#,#,#,n/a
component,quantity type,unit value,#,#,#,n/a
component,quantity type,unit value,#,#,#,n/a
component,quantity type,unit value,#,#,#,n/a
現時点での私のルビースクリプト:
require 'csv'
f = File.new("sp.csv")
o = CSV.open('output.csv', 'w')
f.each_line do |l| #iterate through each line
data = l.split
if l !~ /,/ #if the line does not contain a comma it is a component
o << [data,f.gets] #start writing data, f.gets skips next line but need to skip 2 and split the line to manipulate columns
else
o << ['comma'] #just me testing that I can find lines with commas
end
end
f.gets は次の行をスキップし、それを使用して 2 をスキップする方法がドキュメントでは明確ではありません。その後、その行をコンマで分割し、配列 [列] で行データを操作できると思います。このオフセットの問題は別として、私の一般的なアプローチが良い戦略であるかどうかもわかりません
編集
これが実際のファイルからのいくつかの行です....提供された回答を調べて、すべてが機能するかどうかを確認します。私が持っていたアイデアは、ファイル全体を配列に変換してから読み書きするのではなく、行ごとに読み書きすることです。私の考えでは、これらのファイルが大きくなると、行ごとに実行する方がメモリが少なくて済みます。
助けてくれてありがとう、私は答えを調べてあなたに戻ってきます。
DCB
Result Quantity,BL::BL,BL::BL_DCB-noHeat,DC1::DC1,DC2::DC2,noHS::noHS,20mmHS::20mmHS,Reference,Units
Avg Temperature,82.915,69.226,78.35,78.383,86.6,85.763,N/A,Celsius
RCB
Result Quantity,BL::BL,BL::BL_DCB-noHeat,DC1::DC1,DC2::DC2,noHS::noHS,20mmHS::20mmHS,Reference,Units
Avg Temperature,76.557,68.779,74.705,74.739,80.22,79.397,N/A,Celsius
Antenna
Result Quantity,BL::BL,BL::BL_DCB-noHeat,DC1::DC1,DC2::DC2,noHS::noHS,20mmHS::20mmHS,Reference,Units
Avg Temperature,69.988,65.045,69.203,69.238,73.567,72.777,N/A,Celsius
PCBA_fiberTray
Result Quantity,BL::BL,BL::BL_DCB-noHeat,DC1::DC1,DC2::DC2,noHS::noHS,20mmHS::20mmHS,Reference,Units
Avg Temperature,66.651,65.904,66.513,66.551,72.516,70.47,N/A,Celsius
編集2
以下の回答からいくつかの正規表現を使用して、これを解析するための行ごとの戦略を開発しました。完全を期すための回答として投稿します。
解決策を開発する方法を教えてくれてありがとう