2017-12-14 28 views
1

私は現在、ノードアプリケーションからリモートcsv製品フィードを解析しています。これを行うにはPapa Parseを使用したいと思います(過去にブラウザで成功したので)。Nodejs/Papa Parseを使用してリモートCSVファイルを解析しますか?

パパ解析のGithub:https://github.com/mholt/PapaParse

私の最初の試みとWeb検索は、これがどのように行われるかを正確に上がっていません。 Papaのreadmeによると、Papa ParseはNodeと互換性があり、そのようなBaby Parse(Nodeの解析機能の一部に使用されていました)は価値が下がりました。 https://github.com/mholt/PapaParse#papa-parse-for-node

ではなく、ファイルの読み込み可能なストリームを解析することができますノードでパパ解析のように見えるそのドキュメントの段落から:

はここで、将来的にこの問題につまずく人のためのドキュメントのノードセクションへのリンクです。私の質問は、

トピックを検索する人のために

Is there any way to utilize Readable Streams functionality to use Papa to download/parse a remote CSV in Node some what similar to how Papa in the browser uses XMLHttpRequest to accomplish that same goal?

未来の可視性のために (および同様の質問を繰り返さないようにする)、ここで説明した機能を解析するリモートファイルを利用しようとする:http://papaparse.com/docs#remote-filesは、あなたのコンソールで次のエラーが発生します。

私は肝炎、 "未処理の拒絶にReferenceErrorのXMLHttpRequestが定義されていません" eは公式リポジトリに問題をオープンし、解決する必要のある問題についてもっと学びながらこの質問を更新します。

答えて

1

他の誰かがまだこれを検討している場合は、この回答を追加しています(進捗状況に応じて更新します)。

以前のユーザーがファイルをダウンロードしてから処理したようです。 Papa Parseは読み込みストリームを処理できなければならず、 'http' GETをそのストリームにパイプすることが可能であるべきであるため、これは必要ではありません(SHOULD NOT)。ここで

は私がやろうとしてファイルをダウンロードし、それを解析にフォールバックしていますどのような議論誰かの1つのインスタンスは、次のとおりです。https://forums.meteor.com/t/processing-large-csvs-in-meteor-js-with-papaparse/32705/4

注:上記の赤ちゃんの解析では、パパ解析が動作するようになりましていること、議論されていますNode Baby Parseが償却されました。

は、ファイルのダウンロード

While downloading and then Parsing with Papa Parse is not an answer to my question, it is the only workaround I have as of now and someone else may want to use this methodology.

私のコードをダウンロードして解析する回避策は、現在、このようなものになります。

// Papa Parse for parsing CSV Files 
var Papa = require('papaparse'); 
// HTTP and FS to enable Papa parse to download remote CSVs via node streams. 
var http = require('http'); 
var fs = require('fs'); 

var destinationFile = "yourdestination.csv"; 

var download = function(url, dest, cb) { 
    var file = fs.createWriteStream(dest); 
    var request = http.get(url, function(response) { 
    response.pipe(file); 
    file.on('finish', function() { 
     file.close(cb); // close() is async, call cb after close completes. 
    }); 
    }).on('error', function(err) { // Handle errors 
    fs.unlink(dest); // Delete the file async. (But we don't check the result) 
    if (cb) cb(err.message); 
    }); 
}; 

download(feedURL, destinationFile, parseMe); 

var parseMe = Papa.parse(destinationFile, { 
    header: true, 
    dynamicTyping: true, 
    step: function(row) { 
    console.log("Row:", row.data); 
    }, 
    complete: function() { 
    console.log("All done!"); 
    } 
}); 
0

OKをので、私は、私はこの答えを持っていると思います。しかし、私は時間が告げるだろうと思う。 私のファイルはタブ区切り文字付き.txtであることに注意してください。

var fs = require('fs'); 
var Papa = require('papaparse'); 
var file = './rawData/myfile.txt'; 
// When the file is a local file when need to convert to a file Obj. 
// This step may not be necissary when uploading via UI 
var content = fs.readFileSync(file, "utf8"); 

var rows; 
Papa.parse(content, { 
    header: false, 
    delimiter: "\t", 
    complete: function(results) { 
     //console.log("Finished:", results.data); 
    rows = results.data; 
    } 
}); 
関連する問題