2016-11-06 2 views
0

以下は、コピーされたコピー&のJavaScriptデータです。私の目的は、与えられたExcelデータを各ユニットセルに分割し、それらをHTML側で再利用することです。私の問題は、Javascriptで書くことができたことですが、Rubyで書き直すのに問題があります。私はここでいくつかの助けが必要です。ここでJavaScriptをRubyに翻訳し、Excelデータを2次元変数に分割する

は私のJavaScriptのである:

var data = $('textarea[name=excel_data]').val(); 
console.log(data); 
var rows = data.split("\n"); 
var l = rows.length - 3; 
console.log(l); 
var table = $('<table class="table table-bordered" />'); 
var datas = new Array(); 
for(var y in rows) { 
    var cells = rows[y].split("\t"); 
    var row = $('<tr />'); 
    datas[y] = new Array(); 
    for(var x in cells) { 
    row.append('<td id='+y+x+'>'+cells[x]+'</td>'); 
    datas[y][x] = cells[x]; 
    $('#excel_table_a'+l+'_'+y+x).html(datas[y][x]); 
    $('#excel_table_b'+l+'_'+y+x).html(datas[y][x]); 
    $('#excel_table_c'+l+'_'+y+x).html(datas[y][x]); 
    $('#excel_table_d'+l+'_'+y+x).html(datas[y][x]); 
    $('#excel_table_e'+l+'_'+y+x).html(datas[y][x]); 
    $('#excel_table_z'+l+'_'+y+x).html(datas[y][x]); 
    } //data generate 
    table.append(row); 
} 

これはRubyで私の試みです:私はRailsの上でこのコードを実行しようとすると

data = @bindo.bindo_input 
rows = data.split("\n") 
length = rows.length - 3 
@datas = Array.new 
cells = Array.new { } 
rows.length.each do |y| 
    cells << rows[y].split("\t") 
    @datas[y] = Array.new 
    cells.length.each do |x| 
    @datas[y][x] = cells[x] 
    end 
end 

、私はこのようなエラーメッセージが表示されます。

未定義のメソッド「each」は7です。Fixnum

本当にありがとうございます。

答えて

0

rows.lengthは数値を返します。

eachは、Range、Enumerable、Hash、およびArrayで定義されたメソッドです(ただし整数ではありません)。あなたが何をしようとして

は(rows.length回反復)次のいずれかを行うことができます。

# Enumerator#times 
rows.length.times do |i| 

# Enumerator#times + each 
rows.length.times.each do |i| 

# Range#each 
0.upto(rows.length - 1).each do |i| 

# another Range#each 
(0..(rows.length - 1)).each do |i| 

# Array#each 
Array.new(rows.length).each do |i| 

あなたのコードについてのもう一つの注意:あなたがが、罰金である配列を構築するためにArray.newを使用しています単に[]も使用できます。 cells = Array.new {}の括弧は何もしていません。ブロックをArray.newコンストラクタに渡すことは可能ですが、正しい目的で使用していないようです。少しリファクタリングをやって、またRuby array creation, Array.new vs []

を参照してください:

rows = @bindo.bindo_input.split("\n") 
corrected_rows_length = rows.length - 3 

@datas = [] 
cells = [] 

corrected_rows_length.times do |y| 
    cells << rows[y].split("\t") 
    @datas[y] = [] 
    cells.length.times do |x| 
    @datas[y][x] = cells[x] 
    end 
end 
+0

はありがとうございました。 (返事に遅すぎる..) –

関連する問題