【问题标题】:Get the number of rows from a remote csv using Papa Parse in Javascript在 Javascript 中使用 Papa Parse 从远程 csv 获取行数
【发布时间】:2016-09-06 08:05:56
【问题描述】:

我有以下函数,它从远程 csv 文件中读取数据,并在将其显示在数据表上之前对其进行一些处理。

function loadGrid()
{
        link='{{ url("thecsvfile") }}/'+$('#class-id').val();
        Papa.parse(link, {
        download: true,withCredentials: true,header:true,
        step: function(results, parser) {
         //.... process the data row by row
         cleanDataForGrid(results.data);
        },
        complete:function()
        {
           table =$('#the-grid').DataTable({
                  responsive: true,
                  destroy: true,
                 'bProcessing': true,
                  paging: false,
                  searching: false,
                  info:false,
                  scrollCollapse:true,
                  'columnDefs': [{
                                 'targets': 0,
                                 'searchable':false,
                                 'orderable':false,
                                 'width':'1%',
                                 'className': 'dt-body-center',
                                 'render': function (data, type, full, meta){
                                     return '<input type="checkbox" class="the_check">';
                                 },

                              }],

          });
           updateDownloaded();
        }
       });

}

目前运行良好,问题是当 CSV 文件有很多行时,加载需要很长时间,有时浏览器会挂起或崩溃。 如果文件超过 X 行,我们有没有办法首先获取行数,完全避免下载? 如果我能得到这样一个只返回行数的实现。

function getRows()
{
 var rowcount= Papa.parse(link, {download: false});
if(rowcount<50001) loadGrid();
}

有没有可能有这样的实现?

【问题讨论】:

    标签: javascript jquery csv papaparse


    【解决方案1】:

    完全可以查询一个服务器端程序来处理您的需求:返回 CSV 文件的行数。

    示例:http://www.yoursite.com/handlers/csv/count?file=thecsvfile

    您可以在javascript代码中初始化返回值的视图。 使用 php 和 zend 框架,您可以将返回的值注入到视图模型中,并在视图中显示自身。

    <script type="text/javascript">
    <!--
    var maxcsvfileSize = 50001;
    var thecsvfileSize = <?php echo $this->thecsvfileSize; ?>;
    
    function loadGrid(thecsvfileSize){ 
       // test the length of thecsvfile and do the job you need.
       if (thecsvfileSize < maxcsvfileSize) {
          // do the job
       }
    }
    
    //-->
    </script>
    

    [编辑]

    看看Papi documentation,你就有权利使用stream来处理大文件了:

    Papa.parse("http://example.com/big.csv", {
        download: true,
        step: function(row) {
            console.log("Row:", row.data);
        },
        complete: function() {
            console.log("All done!");
        }
    });
    

    ...这相对容易完成,并且 100% 响应您的问题和需求。

    【讨论】:

    • 这假设我可以控制提供 csv 文件的服务器...
    • 您的应用程序是部署在本地网络服务器 WAMP 上,还是部署在托管公司的分布式服务器架构上?如果是在本地 PC 上安装 PHP、APACHE 并在下载后使用 wget 或任何您喜欢的 linux 工具解析 csv 文件。
    • 我的应用位于托管公司,但 csv 文件来自另一个系统,通常在您调用该 URL 时动态生成,例如 http://theip/path/theclassid
    • 好的,我已经完成了编辑,它将为您提供处理大型 csv 文件所需的内容。
    猜你喜欢
    • 1970-01-01
    • 2018-05-29
    • 1970-01-01
    • 2014-12-03
    • 1970-01-01
    • 1970-01-01
    • 2018-04-01
    • 2021-11-13
    • 2022-09-27
    相关资源
    最近更新 更多