0

所以我有一个csv文件如下

Name1,url1
Name2,url2
Name3,url3

我想创建一个 javascript(如果需要也可以使用 PHP)来遍历 csv 的每一行,并将名称与网站进行比较。页面左上角的图片只是一个显示“名称”的框,页面的右半部分加载了 url,左下角有一个左右箭头,您可以单击该箭头在 CSV 中移动。

我正在考虑使用 iFrame 来分解页面。真正的挑战是加载 CSV。我正在考虑使用 php 执行此操作,并将所有数据放入 html 页面,但如果我的 CSV 很大,这可能是个问题。

我是否以正确的方式解决这个问题?

4

2 回答 2

2

我以前做过一次这样的事情。进行 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()我用来调试的 's,或者保留任何变量名。在我让公司切换到 Google Docs 之前,这用于解析保存为 excel 文件的 80 x 20 excel 表,因此它在 CSV 文件的大小方面非常强大。

于 2013-04-25T21:59:20.367 回答
1

在 PHP 中,您将需要使用fgetcsv().

<?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 问题。
  • 如果需要经常写入此文件,您将更快地遇到 I/O 问题。
  • 尽量不要在内存中存储超过最小行数,否则您可能会遇到 PHP 的内存限制。
  • CSV 坏,数据库好。
于 2013-04-25T22:14:16.717 回答