1

リモート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();
}

そのような実装を持つことは可能ですか?

4

1 に答える 1

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% 対応しています。

于 2016-09-06T08:19:15.500 に答える