0

我有这段代码可以解析 csv 文件而不是给我一个图表,我的问题是我希望它按字母顺序对 csv 文件的行进行排序,而不是开始比较以找到相同的单词并希望它停止检查下一个单词只要它没有找到相似之处,所以程序不需要检查 9000 * 9000 行。

<html>
<head>
    <title>Chart</title>
    <script type="text/javascript" src="jquery.min.js"></script>
    <script type="text/javascript" src="highcharts.js"></script>
    <link rel="stylesheet"  href="style.css" />
</head>

<body>

<script>
$(document).ready(function() {
$.ajax({
   type: "GET",
   url: "uk-4_2_2013.complet.csv",
   dataType: "text",
   success: function(data) {processData(data);}
});
});

function processData(allText) {
// varriable qui contient toutes les lignes du fichier CSV
var allTextLines = allText.split(/\r\n|\n/);

// liste des lignes 
var lignes=new Array(); 
var nombres=new Array(); 

// liste d'occurance qui correspond a chaque ligne
var nombre =[];
var x=0;
var y=0;
var inter1;
var inter2;
var i=0;
var j=0;    
//on parcours les lignes

for ( i=0; i<allTextLines.length; i++) 
  { 
    inetr1 = allTextLines[i].split(';');

      if(lignes.indexOf(inetr1[0])<0)
      {
             lignes[x]=inetr1[0];
             nombres[x]=0;
               for (j=0; j<allTextLines.length; j++)    
                {
                    inetr2 = allTextLines[j].split(';');
                   if (inetr1[0]==inetr2[0])
                     {
                       nombres[x]=nombres[x]+1;
                     }       
                }                   
         x=x+1;                                               
      }   
  }

 $('#Chart_App').highcharts({
    chart: {
        type: 'bar'
    },
    xAxis: {
        categories: lignes
    },
    yAxis: {
        title: {
            text: 'Apps Downloaded'
        }
    },
    series: [{

        data: nombres
    }]
});  
}
</script>

<div id="Chart_App">
</div>

</body>
</html>

csv 看起来像这样

house
home
world
house
home

谢谢

4

2 回答 2

0

正如评论所说,您应该使用数据库对如此大量的数据执行此操作。

无论如何,在 Javascript 中,一旦您拥有一个包含 CSV 值的数组,您就可以使用sort方法按字母顺序对其进行排序。

allTextLines.sort();

这将更改原始数组。

编辑:计数发生...

我了解您想检查每个单词在 CSV 中出现的次数。您有一个每行一个单词的 CSV,因此 allTextLines 是一个每个元素一个单词的数组。在 sort() 方法之后,它是按字母顺序排列的。这是一个想法:

allTextLines.sort();

var lignes = new Array();  // diferent word values
var nombres = new Array();  // their occurrences
var word = allTextLines[0];  // temp word value
var count = 0;  // different words counter
var occurrence = 1; // occurrence of the temp word
for ( i=1; i<allTextLines.length; i++) {
  if (allTextLines[i] != word){
    lignes[count] = word;
    nombres[count] = occurrence;
    count++;
    word = allTextLines[i];
    occurrence = 0;
  } else {
    occurrence++;
  }
}
于 2013-04-16T08:59:01.787 回答
0

您已经有一个包含您的值的数组。您可以像这样对其进行排序:

var allTextLines = allText.split(/\r\n|\n/);
for(var i = allTextLines.length;--i;){
   allTextLines[i] = allTextLines[i].split(';');
}
//...
// now depending on your keys, sort your Array according to the
// index x where the relevant words are
allTextLines.sort(function(a,b){return (a[x] > b[x]);})

现在您已经对 ArrayallTextLines进行了排序,并且可以完成其余的工作。

于 2013-04-16T08:58:36.780 回答