J'ai une situation où un utilisateur peut télécharger un fichier csv. Ce fichier CSV contient beaucoup de données, mais je ne suis intéressé que par 2 colonnes (ID et Date). En ce moment, j'analyse le CSV en utilisant Papaparse

Papa.parse(ev.data, {
    delimiter: "",
    newline: "",
    quoteChar: '"',
    header: true,
    error: function(err, file, inputElem, reason) { },
    complete: function (results) {
        this.parsed_csv = results.data;

    }
});

Lorsqu'il est exécuté, this.parsed_csv représente des objets de données saisis par le nom du champ. Donc, si je JSON.stringify la sortie est quelque chose comme ça

[
  {
    "ID": 123456,
    "Date": "2012-01-01",
    "Irrelevant_Column_1": 123,
    "Irrelevant_Column_2": 234,
    "Irrelevant_Column_3": 345,
    "Irrelevant_Column_4": 456
  },
  ...
]

Donc, ma principale question est de savoir comment puis-je me débarrasser des colonnes dont je n'ai pas besoin et produire simplement un nouveau csv contenant l'ID et la date des colonnes?

Merci

J'ai réalisé une chose: il existe un moyen d'ajouter des variables dynamiques. Par exemple, je laisse les utilisateurs sélectionner les colonnes que je souhaite mapper. Maintenant, je dois faire quelque chose comme ça

let ID = this.selectedIdCol;
this.parsed_csv = results.data.map(element => ({ID: element.ID, Date: element.Date}));

Il dit cependant que l'ID n'est pas utilisé. Merci

2
katie hudson 27 janv. 2019 à 15:19

3 réponses

Meilleure réponse
let data = [
  {
    "ID": 123456,
    "Date": "2012-01-01",
    "Irrelevant_Column_1": 123,
    "Irrelevant_Column_2": 234,
    "Irrelevant_Column_3": 345,
    "Irrelevant_Column_4": 456
  },
  ...
]

Juste produire des résultats en utilisant le code suivant:

data = data.map(element => ({ID: element.ID, Date: element.Date}))

Maintenant que vous avez souhaité la colonne, veuillez générer un nouveau CSV sur ces colonnes

1
Mubeen Khan 27 janv. 2019 à 12:24

Notez que si vous chargez un gros fichier, vous aurez tout le fichier en mémoire juste après l'analyse. De plus, il peut geler le navigateur en raison de la lourde charge de travail. Vous pouvez éviter cela en lisant et en supprimant les colonnes:

  • ligne par ligne
  • morceau par morceau.

Vous devez lire la FAQ de Papaparse avant de l'implémenter. Pour résumer, vous stockerez les colonnes requises en les extrayant des rappels step ou chunk.

0
SerrurierJ 29 mars 2019 à 18:43

Comme Serrurier l'a souligné ci-dessus, vous devez utiliser la fonction step / chunk pour modifier les données plutôt qu'après l'analyse de la carte car les données en mémoire sont déjà disponibles.

PapaParse.parse(file, { skipEmptyLines: true, header: true, step: (results, parser) => {
                  results.data = _.pick(results.data , [ 'column1' 'column2']);
                  return results;
           }});
0
ajaykumar 28 janv. 2020 à 08:09