Как прочитать данные из файла CSV в массив в TypeScript, а затем случайным образом выбрать элемент из него - PullRequest
0 голосов
/ 10 февраля 2019

Я пытаюсь написать программу, которая может случайным образом выбирать имя учащегося из списка имен.Список имен должен быть добавлен с использованием формата файла CSV, и эти имена должны быть помещены в массив, чтобы имя студента можно было «заблокировать», если они отсутствуют на уроке, чтобы их имя не было выбрано.

import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
import { Http } from '@angular/http';
import * as papa from 'papaparse';

@IonicPage()
@Component({
  selector: 'page-csv',
  templateUrl: 'csv.html',
})
export class CsvPage {
  csvData: any[] = [];
  headerRow: any[] = [];

constructor(
    public navCtrl: NavController, 
    public navParams: NavParams, 
    private http: Http) {
    // this.readCsvData();
  }
/* 
  private readCsvData() {
    this.http.get('assets/csv.csv')
      .subscribe(
      data => this.extractData(data),
      err => this.handleError(err)
      );
  }

  private extractData(res) {
    let csvData = res['_body'] || '';
    let parsedData = papa.parse(csvData).data;

    this.headerRow = parsedData[0];

    parsedData.splice(0, 1);
    this.csvData = parsedData;
  }

   downloadCSV() {
    let csv = papa.unparse({
      fields: this.headerRow,
      data: this.csvData
    });

    var blob = new Blob([csv]);
    var a = window.document.createElement("a");
    a.href = window.URL.createObjectURL(blob);
    a.download = "newdata.csv";
    document.body.appendChild(a);
    a.click();
    document.body.removeChild(a);
  }

  private handleError(err) {
    console.log('An error has occured: ', err);
  }

  trackByFn(index: any, item: any) {
    return index;
  }
} 

handleFiles(files) {
  // Check for the various File API support.
  if (window.FileReader) {
      // FileReader are supported.
  } else {
      alert('FileReader are not supported in this browser.');
  }
}
*/
getAsText(fileToRead) {
  var reader = new FileReader();     
  reader.readAsText(fileToRead)
  reader.onload = this.loadHandler;
  reader.onerror = this.errorHandler;
}

loadHandler(event) {
  var csv = event.target.result;
  this.processData(csv);
}

processData(csv) {
    var allTextLines = csv.split(/\r\n|\n/);
    var lines = [];
    for (var i=0; i<allTextLines.length; i++) {
        var data = allTextLines[i].split(';');
            var tarr = [];
            for (var j=0; j<data.length; j++) {
                tarr.push(data[j]);
            }
            lines.push(tarr);
    }
  console.log(lines);
}

errorHandler(evt) {
  if(evt.target.error.name == "NotReadableError") {
      alert("Canno't read file !");
  }
}
}

Код между / * и * / - это первый способ, которым я попытался это сделать, но он не сработал.

Он должен вывести список имен, которые можно изменитьиз приложения.Как я могу это сделать?

...