【问题标题】:How to parse CSV in CasperJS with Papa Parse?如何使用 Papa Parse 在 CasperJS 中解析 CSV?
【发布时间】:2015-01-20 02:26:23
【问题描述】:

我正在尝试使用 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();

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

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

【问题讨论】:

  • 像 php 中的 print_r()。是的,我从内部评估中看到了 console.log。 evaluate 里面的console.log 只是为了检查evaluate 里面是否发生了什么。
  • 它不是整个脚本。只是那部分不起作用。我有函数 print_r() 不是问题。
  • 这将是整个脚本,至少不工作的部分“11111 ....”是可见的,包括输入。 '222222...' 不可见,连 2 的字符串也不可见。'333333...' 可见但结果 === null
  • 好的,这意味着页面上下文中的Papa 存在一些错误。您还可以注册page.error 事件以查看这是什么错误。我怀疑 Papa 是未定义的,因为 clientScripts 没有注入到空页面中。当您使用casper.start('http://example.com') 时会发生什么?

标签: javascript casperjs papaparse


【解决方案1】:

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();

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

【讨论】:

    猜你喜欢
    • 2015-01-21
    • 2018-05-29
    • 2014-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 2022-09-27
    相关资源
    最近更新 更多