2017-08-13 2 views
2

Meine React Native App (nur auf Android) ist eine grundlegende App, die einige Sensordaten sammelt, wenn Benutzer mit der Videoaufnahme beginnen. Ich habe drei Arrays von Sensoren Daten: Beschleunigungsmesser, Gyroskop und Licht. Ich möchte sie auf dem Gerät als .csv Dateien speichern, damit ich sie für die nächsten Schritte verwenden kann. Zurzeit kann ich sie in .txt speichern (mit reactive-native-fs, aber sie unterstützen nicht .csv Erweiterung), aber was ich will, ist .csv. Gibt es eine Möglichkeit, das in React Native zu tun?So erstellen und speichern Sie CSV-Dateien in React Native?

Die Daten werden wie folgt aussehen:

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] 

.csv gewünscht, zum Beispiel accelerometer.csv:

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

Werfen Sie einen Blick auf fs ein link to the equivalent code in meinem reagieren-native Projekt teilen. Sie können eine Zeichenfolge erstellen und sie als CSV speichern. Afterall, CSV ist nur eine Zeichenfolge mit Kommas und Zeilenumbrüchen richtig? – eden

Antwort

2

Sie react-native-fetch-blob verwenden können, um das Gerätedateisystem zu schreiben. (Ich habe mich das auch gefragt!)

Wir beginnen mit der Umwandlung eines Array von Werten in eine Zeichenfolge. Wenn unsere Werte durch , Kommas getrennt sind und unsere Zeilen durch \n Zeilenumbrüche getrennt sind, lautet unsere Zeichenfolge csv. Wir können diese Zeichenfolge nehmen, schreiben Sie es in eine Datei mit einer .csv Dateierweiterung, und voila haben wir eine .csv Datei.

hier Code, der genau dies tut:

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

dieser Ansatz für mich auf einem Android-7.x-Testgerät gearbeitet.

, falls es ist hilfreich, ich werde auch

+0

Beachten Sie, dass es viele Pakete für die csv-Kodierung gibt, wenn Sie ausgefallene Dinge tun und seltsame Randfälle behandeln wollen. Dieses einfache Vorgehen funktionierte für mich. https://www.npmjs.com/search?q=encode+csv –

+0

Wahrscheinlich ein wenig Off-Topic, aber gibt es eine Möglichkeit, den Benutzer wissen zu lassen, dass die Datei heruntergeladen/erstellt wurde? Ein bisschen wie "Heruntergeladen" Benachrichtigung. Ich sehe, dass wir '.config' für' .fetch' verwenden können, aber scheint nicht für '.fs' zu erscheinen. Meine Lösung war im Moment, ein zusätzliches Benachrichtigungspaket zu verwenden und auf '.then' zu benachrichtigen, aber das scheint ein wenig unnötig zu sein, da 'reactive-native-fetch-blob' das bereits haben sollte. – shriek

Verwandte Themen