angular - 启用以正确导入 csv
问题描述
我创建了以下应用程序 = https://stackblitz.com/edit/angular-ivy-6r12ta?file=src%2Fapp%2Fapp.component.html
这将导入一个 csv 文件。但我有两个问题:
- 我不得不在语音字符串周围加上双引号,以逃避放在其中的逗号(我知道这是标准做法)。但是我想在导入时删除它们。
- 如果语音字符串中有逗号,则应用程序根本不会导入它。我假设这是我拆分逗号的问题。
Stackoverlow 不允许我上传文件供您测试,但这里有一些您可以复制到 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"
解决方案
您的代码不处理行中存在逗号的情况。以下行是问题所在 -
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();
}
}
推荐阅读
- javafx - JavaFx 音量滑块不会改变音量。音量保持不变
- mysql - Qlikview 和 SQL 查询结果的区别
- c# - 如何遍历 WebGrid 并获取 DropDownList 的选定值?
- vue.js - 如何在 Element UI 表格中显示嵌套单元格?
- python - 如何点击搜索公司名称按钮,输入公司名称并使用 Selenium 和 Python 进行搜索?
- sql - 从列销售中每 7 行求和一次,而整数表示距离安装促销材料的 n 天(安装之前和之后)
- linux - Uevent 作为从内核到用户空间的简单通知
- java - 允许 Spring 在不同的 jars 中有多个 WebMvcConfigurer 实现
- matlab - 在 SNR 计算期间,下标索引必须是实数正整数或逻辑数
- css - 如何使用自定义样式在 Reactjs 中使用 html2canvas 截取 DOM