2013-11-22 57 views
0

使用數據我有一個.csv文件,看起來像:從.CSV用JavaScript

oS,browName,browVer,timeCanvas,timeSvg 
Windows,Firefox,25.0,0.25,1.23 
Windows,Opera,12.16,0.572,1.465 

,我希望做一個函數,將計算算術平均值爲timeCanvas和timeSvg看起來像:

for (int i = 0; i < maxrow; i++) 
{ 
if(oS=Windows) 
{ 
    if(browName=FireFox 
    { 
    if(browVer=25.0) 
     { 
     a=a+1; 
     timeC=timeC+timeCanvas 
     timeS=timeS+timeSvg 
     } 
    } 
    } 
    ... 
} 

我GOOGLE了我的問題,唯一的解決辦法我能找到的jQuery的CSV 0.7與toObjects法(http://code.google.com/p/jquery-csv/)>我想知道是否有可能與此libaarry做我想做什麼?如果有一些很好的例子(找不到我自己)?

.............................................. ............................

編輯:

所以我tryed瓦迪姆解決方案,但它不DEOS工作,我不知道hwat我worng.Here是代碼。

<script type="text/javascript" src="jquery-1.3.2.js"></script> 
    <script type="text/javascript"> 

function draw(){ 

var a = 0, 
    timeC = 0, 
    timeS = 0, 
meanCFf=0, 
meanSFf= 0; 

$.get('test1.csv').done(function(data) { 
var i, 
    lines = data.split('\n'), 
    line = lines[0].split(','), 
    oS = line.indexOf('oS'), 
    browName = line.indexOf('browName'), 
    browVer = line.indexOf('browVer'), 
    timeCanvas = line.indexOf('timeCanvas'), 
    timeSvg = line.indexOf('timeSvg'); 
for(i=1; i<lines.length; i++) { 
    line = lines[i].split(','); 
    if(line[oS] === 'Windows') { 
     a++; 
     timeC += parseFloat(line[timeCanvas], 10); 
     timeS += parseFloat(line[timeSvg], 10); 
    } 
} 
}); 
    meanCFf = timeC/a; 
meanSFf = timeC/a; 
var os1 = document.getElementById("osInfo1"); 
os1.innerHTML = "Twoja średnia to: " + meanCFf; 
var os2 = document.getElementById("osInfo2"); 
os2.innerHTML = "Twój sytem operacyjny to: " + meanSFf; 
    } 
</script> 
</head> 
<body onload="draw()"> 
    <p id="osInfo1"></p> 
    <p id="osInfo2"></p> 
</body> 

它看起來像for循環不工作怎麼把一個爲零所有的時間。

+0

首先,用'$ .ajax()'得到你的csv文件,然後使用這個庫。 – Brewal

+0

你爲什麼不試試看看會發生什麼。去嘗試一下,看看是否有東西破裂。然後回到這裏告訴我們錯誤。在你給我們的鏈接主頁上有例子。 – j0hnstew

+0

你在你的代碼中出現了一些錯誤:缺少''''和'='你應該有'=='的地方 – putvande

回答

0

使用jQuery你可以做這樣的事情:

的JavaScript(的script.js)

$(function() { 
    var a = 0, 
     timeC = 0, 
     timeS = 0; 
    $.get('test1.csv').done(function(data) { 
     var i, 
      lines = data.split(/\r\n|\n/), 
      line = lines[0].split(','), 
      oS = line.indexOf('oS'), 
      browName = line.indexOf('browName'), 
      browVer = line.indexOf('browVer'), 
      timeCanvas = line.indexOf('timeCanvas'), 
      timeSvg = line.indexOf('timeSvg'); 
     for(i=1; i<lines.length; i++) { 
      line = lines[i].split(','); 
      if(line[oS] === 'Windows' && line[browName] === 'Firefox' && line[browVer] === '25.0') { 
       a++; 
       timeC += parseFloat(line[timeCanvas], 10); 
       timeS += parseFloat(line[timeSvg], 10); 
      } 
     } 

     $('#osInfo1').html("Twoja średnia to: " + timeC/a); 
     $('#osInfo2').html("Twój sytem operacyjny to: " + timeS/a); 
    }); 
}); 

HTML

<!DOCTYPE html> 
<html> 
    <head> 
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
    <link rel="stylesheet" href="style.css" /> 
    <script src="script.js"></script> 
    </head> 

    <body> 
    <h1>CSV Test</h1> 
    <div id="osInfo1"></div> 
    <div id="osInfo2"></div> 
    </body> 

</html> 
+0

我想嘗試你的解決方案,但是我不能讓它工作。我編輯帖子並粘貼我的代碼mybe我做錯了 – user3022030

+0

@ user3022030您正在嘗試使用'timeC'和'timeS',然後再計算它們。 '.get()'是異步的,你可以在'.done(function {...})'回調中使用基於響應計算的值。 'FireFox'和'Firefox'是不同的字符串;如果csv文件是在Windows環境下創建的,換行符將是'\ r \ n'而不是'\ n'。我使用所有這些功能編輯了我的帖子。這裏是工作示例http:// plnkr。CO /編輯/ mAaIGICzszPPX6g78mMe?P =預覽 – Vadim

0

您可以手動得到的文件夾使用javascript然後嘗試手動解析它,或者您可以使用PHP。 PHP有一些偉大的庫,用於處理標準的CSV。

每次我親手創建一個簡單的PHP JSON服務,只需簡單地執行csv所需的功能並提供數據,就不需要經過手動使用它的所有工作。然後,您可以使用JavaScript AJAX檢索您的數據,從而可以像往常一樣執行您需要的代碼。

總體而言,我認爲你會發現這將意味着更少的代碼爲你和theres更多的文件在網上支持PHP的CSV和JSON服務。

當然,這是假設您有一臺擁有PHP的服務器。