如何使用 Papa Parse 在 CasperJS 中解析 CSV?

How to parse CSV in CasperJS with Papa Parse?

我正在尝试使用 papa parse 在 CasperJS 中加载和解析一个 csv 文件。

这是该任务的代码

var casper = require('casper').create({   
    verbose: true, 
    logLevel: 'debug',
    userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:34.0) Gecko/20100101 Firefox/34.0',
    pageSettings: {
        loadImages:  true,
        loadPlugins: false,
        webSecurityEnabled: false     
    },
    clientScript: [
        'jquery-2.1.3.min.js',
        'jquery.csv-0.71.min.js',
        'papaparse.min.js'
        ],

    viewportSize: {
        width: 1440,
        height: 900
    }
});

var fs = require('fs');

casper.on('remote.message', function(msg) {
    this.echo('remote message caught: ' + msg);
});

casper.start();

casper.then(function(){

    var input = fs.read('order4.csv');

    var config = {
        delimiter: "",  // auto-detect
        newline: "",    // auto-detect
        header: true,
        dynamicTyping: false,
        preview: 0,
        encoding: "",
        worker: false,
        comments: false,
        step: undefined,
        complete: undefined,
        error: undefined,
        download: false,
        skipEmptyLines: true,
        chunk: undefined,
        fastMode: undefined
    }

    var a = {'config' : config, 'input' : input}

/*    var result = this.evaluate(function(input) {
            //console.log(input);
            var results = jquery.csv.toObjects(input);
            console.log(results);
            return results;
        },input);*/

    //var result = Papa.parse(a['input'],a['config']);


    var result = this.evaluate(function(a) { 
        console.log('111111111111111111111' + a['input']);
        var results = Papa.parse(a['input'],a['config']);
        console.log('2222222222222222222' + results);

        return results;
    },a);

    this.echo('333333333333333' + result);
});

casper.run();

$input inside evaluate 是可见的,但 $results 和最后一个命令中的 $result 一样是空的。

有没有更好的方法在 CasperJS 中加载和解析 csv 文件。如何在 evaluate() 之外调用 Papa.parse 因为我只想加载本地 csv 文件。

Papa Parse 似乎在外部上下文中工作,因此您不需要 evaluate 来使用它。

这是一个完整的脚本:

var fs = require('fs');
eval(fs.read('papaparse.min.js'));

var config = {
    delimiter: "",  // auto-detect
    newline: "",    // auto-detect
    header: true,
    dynamicTyping: false,
    preview: 0,
    encoding: "",
    worker: false,
    comments: false,
    step: undefined,
    complete: undefined,
    error: undefined,
    download: false,
    skipEmptyLines: true,
    chunk: undefined,
    fastMode: undefined
};

console.log(JSON.stringify(Papa.parse(fs.read('order4.csv'), config), undefined, 4));

phantom.exit();

请注意,如果您知道 papaparse.min.js 实际上做了它应该做的事情,那么 eval 在这种情况下并不是邪恶的。