2017-08-13 14 views
2

My Reactネイティブアプリ(アンドロイドのみ)は、ユーザーがビデオの録画を開始したときにセンサーデータを収集する基本的なアプリです。私はセンサーデータの3つの配列を持っています:加速度計、ジャイロスコープ、そして光。私はそれらを.csvファイルとしてデバイスに保存したいので、次のステップでそれらを使用できます。現在、私は.txt(react-native-fsを使用していますが、.csv拡張子はサポートしていません)で保存できますが、私が欲しいのは.csvです。 React Nativeでこれを行う方法はありますか?React NativeでCSVファイルを作成して保存する方法は?

データは次のようになります。

.csv希望
this.accelerometer = [ 
    {x: 12, y: 15, z: 17}, 
    {x: 12, y: 15, z: 17}, 
    ... 
    {x: 12, y: 15, z: 17}, 
] 

this.gyroscope = [ 
    {x: 12, y: 15, z: 17}, 
    {x: 12, y: 15, z: 17}, 
    ... 
    {x: 12, y: 15, z: 17}, 
] 

this.light = [6, 7, 8, 9, 10,.., 11] 

、たとえばaccelerometer.csvのために:

x ,y ,z 
12,15,17 
+1

内部link to the equivalent codeはFSを見てください共有しましょう。文字列を作成してcsvとして保存することができます。 Afterall、csvはカンマと改行を含む文字列です。 – eden

答えて

2

あなたは、デバイスのファイルシステムへの書き込みにreact-native-fetch-blobを使用することができます。 (私もこれも疑問でした!)

まず、値の配列を文字列に変換します。値が,カンマで区切られ、行が\n改行で区切られている場合は、文字列はcsvです。私たちはその文字列を取り、.csvファイル拡張子を持つファイルに書き込み、voila私たちは.csvファイルを持っています。

import RNFetchBlob from 'react-native-fetch-blob'; 

const values = [ 
    ['build', '2017-11-05T05:40:35.515Z'], 
    ['deploy', '2017-11-05T05:42:04.810Z'] 
]; 

// construct csvString 
const headerString = 'event,timestamp\n'; 
const rowString = values.map(d => `${d[0]},${d[1]}\n`).join(''); 
const csvString = `${headerString}${rowString}`; 

// write the current list of answers to a local csv file 
const pathToWrite = `${RNFetchBlob.fs.dirs.DownloadDir}/data.csv`; 
console.log('pathToWrite', pathToWrite); 
// pathToWrite /storage/emulated/0/Download/data.csv 
RNFetchBlob.fs 
    .writeFile(pathToWrite, csvString, 'utf8') 
    .then(() => { 
    console.log(`wrote file ${pathToWrite}`); 
    // wrote file /storage/emulated/0/Download/data.csv 
    }) 
    .catch(error => console.error(error)); 

このアプローチは、Android 7.xの試験装置上で私の仕事:ここ

はちょうどこれを実行するコードです。

それは便利だ場合には、私も反応し、ネイティブプロジェクト

+0

あなたが奇妙なことを行い、奇妙なエッジケースを処理したい場合は、csvエンコーディング用のパッケージがたくさんあることに注意してください。今回は、この単純なアプローチが私のために働いた。 https://www.npmjs.com/search?q=encode+csv –

+0

おそらく少し話題はありますが、ファイルがダウンロード/作成されたことをユーザーに知らせる方法はありますか? 「ダウンロード済み」通知のようなもの。私は '.fetch'に' .config'を使うことができますが、 '.fs'には現れません。今私の解決策は、余分な通知パッケージを使用し、 '.then'で通知することですが、' react-native-fetch-blob'がこれをどのように持っているべきかを考えると少し不必要です。 – shriek

関連する問題