项目中有一个需求是上传CSV文件,解析数据然后传给后台,
打开.CSV 后缀的文件,其格式如下

解析过程如下(angular + ngZorro版本)
<nz-upload [nzBeforeUpload]="beforeUpload" nzAccept=".csv">
<button nz-button nzSize="small" nzType="primary">
<i nz-icon nzType="upload"></i>
ImportZero Rote data
</button>
</nz-upload>
/**
* 导入 csv 文件
*/
public beforeUpload = (file: NzUploadFile): boolean => {
this.onFileChange(file);
return false;
}
/**
* 前端解析 csv 文件
*/
public onFileChange(file) {
const reader = new FileReader();
reader.readAsText(file);
reader.onload = () => {
const csvData = reader.result;
const csvRecordsArray = (csvData as string).split(/\r\n|\n/);
this.simpleCurveList = this.parseCSVFileData(csvRecordsArray);
};
reader.onerror = () => {
console.log('error is occured while reading file!');
};
}
/**
* 转化数组格式
*/
private parseCSVFileData(csvRecordsArray: any) {
const csvArr = [];
for (let i = 1; i < csvRecordsArray.length; i++) {
const curruntRecord = csvRecordsArray[i].split(',');
const csvRecord: any = {};
// 自定义数组对象键名
csvRecord.date = curruntRecord[0]?.trim();
csvRecord.maturity_date = curruntRecord[1]?.trim();
csvRecord.maturity_term = curruntRecord[2]?.trim();
csvArr.push(csvRecord);
}
return csvArr;
}
网友评论