Я создал следующее приложение = https: / /stackblitz.com/edit/angular-ivy-6r12ta?file=src%2Fapp%2Fapp.component.html

Это импортирует файл csv. Но у меня 2 проблемы:

  1. Мне пришлось заключить речевую строку в двойные кавычки, чтобы избежать запятых внутри них (я знаю, что это стандартная практика). Однако я хочу удалить их при импорте.
  2. Если в строке речи есть запятая, приложение вообще ее не импортирует. Я предполагаю, что это проблема, когда я разделяю запятые.

Stack Overflow не позволяет мне загрузить файл для тестирования, но вот текст, который вы можете скопировать в файл csv:

id,speechText
84983428,"I can't pick up a person"
51489463,"I don't think you've thought this through properly"
58345,"This line won't import, because it has a comma"
0
Andrew Junior Howard 12 Фев 2021 в 14:29

1 ответ

Лучший ответ

Ваш код не обрабатывает случаи, когда в строках присутствует запятая. Следующая строка - это проблема -

let curruntRecord = (<string>csvRecordsArray[i]).split(",");
      if (curruntRecord.length == headerLength) {...}

Это условие не будет выполнено, если в одной из ячеек есть хотя бы одна запятая.

Вам следует использовать правильный парсер csv. Я изменил ваш код с помощью ngx-csv-parser.

Установить

npm install --save ngx-csv-parser

app.module.ts

import { NgxCsvParserModule } from "ngx-csv-parser";

imports: [..., NgxCsvParserModule],

app.component.ts

- ваш измененный метод uploadListener -

uploadListener($event: any): void {
    let text = [];
    let files = $event.srcElement.files;

    if (this.isValidCSVFile(files[0])) {
      this.ngxCsvParser.parse(files[0], { header: false, delimiter: ',' })
      .pipe().subscribe((result: Array<any>) => {
 
        console.log('Result', result);
        this.records = result;
      }, (error) => {
        console.log('Error', error);
      });
    } else {
      alert("Please import valid .csv file.");
      this.fileReset();
    }
  }
1
Sarthak Jain 12 Фев 2021 в 11:53