2013-04-25 32 views
0

所以我有一個CSV文件如下使用JavaScript步驟通過CSV

Name1,url1 
Name2,url2 
Name3,url3 

我想創建一個JavaScript(也可以使用PHP如果需要的話)要經過CSV的每一行,並將名稱與網站進行比較。頁面左上角的圖片只是一個顯示「名稱」的框,右側的一半頁面會加載url,左下角的guadrant有一個左右箭頭,您可以點擊該箭頭來移動CSV。

我正在考慮iFrames來分解頁面。真正的挑戰是在CSV中加載。我正在考慮用php做這個,並把所有的數據放入html頁面,但是如果我的CSV很大,這可能是一個問題。

我以正確的方式解決這個問題嗎?

+0

你真的在這裏問什麼,你可以提煉一下嗎?就像「我如何加載CSV文件以便我可以使用JavaScript來檢查它?」。就目前而言,你的問題範圍非常廣泛。 – Madbreaks 2013-04-25 21:52:12

+0

我有一堆名稱的地方,並與他們一起去的網站。我已經有超過10,000人,我必須通過視覺檢查每一個是否正確。所以我正在嘗試創建一個使頁面更簡單的javascript頁面 – 2013-04-25 21:55:39

+0

您能否通過一個名爲「name,www.name.com」的行顯示一個示例(以文本形式或使用jsfiddle.net)? – Grzegorz 2013-04-25 22:04:24

回答

1

我之前做過這樣的事情。做一個AJAX調用來獲取CSV(使用jQuery):

var x = $.ajax('schedule.csv').done(function(){parse(x);}); 

然後解析這樣的數據:

function parse (data) 
{ 
    cells=[]; 
    rowBreaks = []; 
    rowCounter=0; 
    var cellCounter=0; 
    var inQuotes = false; 

    y=data.responseText; 
    console.log(y.length); 
    for(n=0; n<y.length; n++) 
    { 
     if(n == 0 & y[n] != ",") 
      cells[cellCounter]=y[n]; 
     if(n != 0 && y[n] != ',') 
     { 
      cells[cellCounter]+=y[n]; 
     } 
     if(y[n] == '"') 
      inQuotes = !inQuotes; 
     if(n>0 && !inQuotes && y[n] == ",") 
     { 
      if(cells[cellCounter] == undefined) 
       cells[cellCounter] = " "; 
      else 
       cells[cellCounter]+=" "; 
      cellCounter++; 
     } 
     if(n>0 && !inQuotes && (y[n] == "\n" || y[n] == "\r")) 
     { 
      rowBreaks[rowCounter] = cellCounter; 
      rowCounter++; 
     } 
     if(cells[cellCounter] == undefined) 
      cells[cellCounter] = ""; 
    } 
    fixRows(); 
    writeTable(); 
    $("body").css("overflow-x", "auto"); 

} 

你不應該需要這一切,但它會解析一個CSV文件非常方便。如果有幫助,對writeTable()功能是這樣的:

function writeTable() 
{ 
    table=$("<table border='1' cellpadding='1' />"); 
    var q; 
    var rowBlank; 
    var rowLength = rowBreaks[0]-8; 
    for(z=0; z<rowBreaks.length; z++)  
    { 
     tr = $("<tr />"); 
     if(z == 0) 
      tr.addClass("header"); 
     rowBlank = true; 
     for(i=0; i<rowLength; i++) 
     { 
      q=(z)*25+i; 
      td=$("<td />").html(cells[q]); 
      tr.append(td); 
      if(cells[q] != " " && cells[q] != "" && cells[q] != "\n" && cells[q] != "\r") 
       rowBlank = false; 
     } 
     /*if(!rowBlank)*/ 
     table.append(tr); 
    } 

    table.css({ 
     "border-spacing" : 0, 
     "width"    : "100%", 
     "height"   : "99%" 

    }); 

    $("#schedule").html(""); 
    $("#schedule").append(table); 
    sizeTable(); 
} 

它的醜陋,但它爲我工作。

請注意,這是所有真實的代碼,因此您不需要我用於調試的console.log()或保留任何變量名稱。這是用來解析一個80 x 20 Excel表保存爲excel文件,然後我得到該公司切換到Google文檔,所以它在CSV文件的大小方面非常強大。

1

在PHP中,您將要使用fgetcsv()。如果這個文件需要頻繁讀取你要運行到I/O問題

  • <?php 
    if (($handle = fopen("test.csv", "r")) !== FALSE) { 
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
         list($name, $url) = $data; 
         // do something with $name and $data 
        } 
        fclose($handle); 
    } 
    

    只要記住幾件事情。

  • 如果此文件需要經常寫入,您將會更快地遇到I/O問題。
  • 儘量不要在內存中存儲最少的行,否則你可能會遇到PHP的內存限制。
  • CSV不好,數據庫不錯。
+0

因此,我認爲應該使用數據庫來存儲數據,而不是將我的原始數據存儲在CSV中?如果是這樣,那麼我會把我的數據放在一個MySQL(我的首選數據庫,反饋歡迎,如果你感覺不然),並使用PHP/JavaScript連接到該數據庫並加載數據? – 2013-04-26 01:06:02

+0

@ djc391在大多數情況下,最好將這樣的大量數據存儲在SQL數據庫中。直接的好處是索引,查詢緩存,與其他數據[其他表]更流暢的集成,以及能夠將數據操作卸載到另一臺服務器。 – Sammitch 2013-04-26 15:33:36