2013-04-25 35 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