2013-11-26 161 views
0

我有csv文件中的數據的音調,當我試圖從數據中創建圖形時,我的javascript不讀取每行的最後一個元素。我用另一個csv文件與更少的數據嘗試我的JavaScript,並且它工作正常。我知道在Java中,當您使用掃描器時,您有時需要添加system.out.println(「\ n」),因爲它有時會跳過一行,以致無法在控制檯上寫入輸入。我的問題也是這樣的csv文件嗎?缺少行的最後一個元素

這裏是我的javascript:

function f() { 
$(document).ready(function() { 
    var arr1 = new Array(); 
    var arr2 = new Array(); 
    var arr3 = new Array(); 
    var dat = {}; 
    var options = { 
    chart: { 
     renderTo: 'container', 
     defaultSeriesType: 'bar', 
     zoomType: 'xy', 
    }, 
    title: { 
     text: 'Gene' 
    }, 
    subtitle: { 
     text: name 
    }, 
    xAxis: { 
     categories: [] 
    }, 
    legend: { 
     enabled: false 
    }, 
    yAxis: { 
     title: { 
      text: 'Position' 
     }, 
     minTickInterval: 10 , 
     labels: { 
      enabled: false 
     } 
    plotOptions: { 
      series: { 
       stacking: 'normal', 
      } 
    }, 
    tooltip: { 
     formatter: function() { 
      return 'Sample: <b>' + this.x + '</b><br/><br/>' + 
      '<n>Position: <b>' + this.series.name + '</b><br/><br/>'+ 
      '<n>SNP ID: <b>' + arr2[arr1.indexOf(this.series.name)] + '</b><br/><br/>'; 
     } 
    }, 
    series: [] 
    }; 
    $.get('example.asp', function(data) { 
    // Split the lines 
    var lines = data.split('\n'); 

    // Iterate over the lines and add categories or series 
    $.each(lines, function(lineNo, line) { 
     var items = line.split(','); 
     // header line containes categories 
     if (lineNo == 0) { 
      $.each(items, function(itemNo, item) { 
       options.xAxis.categories.push(item); 
      }); 
     } 
     // the rest of the lines contain data with their name in the first position 
     else { 
      var series = { 
       data: [] 
      }; 
      $.each(items, function(itemNo, item) { 
       var data = {}; 
       var hash = {}; 
       if (itemNo == 1) { 
        series.name = item; 
        arr1.push(item); 
       } 
       else if (itemNo == 0) { 
        arr2.push(item); 
       } 
       else //if //(itemNo < items.length-1){ 
        { 
        arr3.push(item); 
        hash[item] = 1; 
        data.y = hash[item]; 
        if (item === '15') { 
         data.color = 'grey'; 
        } 
        else if (item === '3') { 
         data.color = 'blue'; 
        } 
        else if (item === '16') { 
         data.color = 'white'; 
        } 
        else { 
         data.color = 'red'; 
        } 

        series.data.push(data); 
       //  dat.push(series); 
       } 
      }); 
      options.series.push(series); 
     // dat.push(series); 
     } 
     }); 

     // Create the chart 
    var chart = new Highcharts.Chart(options); 
}); 
    }); 
} 

,這裏是我的CSV文件看起來像: link

+1

如果CSV文件包含那麼多數據,那麼在客戶端執行csv處理似乎不是正確的方法。 – rdodev

+0

然後我應該使用哪一個? JSON?你有什麼建議嗎? –

+0

我的建議是在後端使用python,ruby,perl或其他任何適合自己喜歡的東西進行CSV處理,並將其存儲在與JS無關的結構化數據庫中。 – rdodev

回答

0

我試圖重現上jsfiddle問題,但一切工作正常,我見: http://jsfiddle.net/ZM6A5/

對於每一行你有x個元素,並且series.data包含x-2個元素,這對你的文件來說非常好,其中每行開始就像Janet,d, ... - 所以兩個第一個元素不是數據的一部分。

你能指點我問題在哪裏,或者請在jsFiddle上重新創建嗎?