【HarmonyOS】鸿蒙应用加载读取csv文件

【HarmonyOS】鸿蒙应用加载读取csv文件

一、问题背景:

1. csv文件是什么? csv是一种文本文件格式,与json类似。会存储一些文本内容,应用需要读取该文件,进行UI内容得填充等。 文件中的数据是以纯文本形式存储的,并且数据行和字段之间通过特定的分隔符(通常是逗号)分隔。 2. CSV 文件示例

dart 复制代码
xx.csv
姓名,年龄,城市
张三,28,北京
李四,34,上海
王五,22,广州

数据结构:
export default class TestObj{
  name: string = "";
  age: string = "";
  city: string = "";
}

在上面得示例中:

第一行是表头,定义了三个字段:姓名、年龄和城市。 接下来的三行是数据记录,每行包含一条记录。 字段之间用逗号分隔。

二、解决方案:

1. 方式一: 使用三方提供得SDK进行csv文件得解析: "@ohos/opencsv": "2.0.0"

dart 复制代码
import { getPath, openSync,CSVReaderBuilder,CSVParser } from '@ohos/opencsv';
getPath().then((path) => {
    let rd = openSync (path,'test.csv'/* csv filename */,0o2)
    let readerBuilder: CSVReaderBuilder = new CSVReaderBuilder(rd)
    let readerbuildcsv = readerBuilder
          .withCSVParser(new CSVParser())
          .buildCSVReader()
    let lines: Array<Array<string>> = null;
    lines = readerbuildcsv.readAll() // Read all data in the CSV file.
    console.log(lines)
    /* [
     *  [1,'Zhang San',18]
     *  [2,'Li Si',19]
     *  [3,'Wang Wu', 20]
     *  [4,'Zhao Liu', 21]
     *               ]
     */
    readerbuildcsv.close () // Close reading.
})

2. 方式二:

dart 复制代码
  private parseCsvToStrings(csvString: string, delimiter = ','): Array<TestObj> {
    const lines = csvString.trim().split('\n');
    const headers = lines[0].split(delimiter);
    // 将object替换为你的目标对象类型
    const data: Array<TestObj> = new Array();

    for (let i = 1; i < lines.length; i++) {
      const values = lines[i].split(delimiter);
      const row: TestObj = new TestObj();
      headers.forEach((header, index) => {
        let res: string = values[index]?.trim()?.toString() || '';
        switch (header.trim()){
          case "name":
            row.name = res;
            break;
          case "age":
            row.name = res;
            break;
          case "city":
            row.name = res;
            break;
        }
      });
      data.push(row);
    }
    return data;
  }

注意: 对于大型CSV文件,手动解析可能会比较慢,而使用优化的第三方库可能会更快。

相关推荐
!win !16 分钟前
uni-app项目怎么实现多服务环境切换
前端·uni-app
源猿人17 分钟前
文化与代码的交汇:OpenCC 驱动的中文语系兼容性解决方案
前端·vue.js
xw520 分钟前
uni-app项目怎么实现多服务环境切换
前端·uni-app
Kjjia21 分钟前
到底是 react 性能拉胯?还是吃了机制的亏
前端·react.js
ViceBoy_22 分钟前
前端的Promise的方法all,race,any
前端·javascript
飞翔的猪猪29 分钟前
GitHub Recovery Codes - 用于 GitHub Two-factor authentication (2FA) 凭据丢失时登录账号
前端·git·github
前端开发熊34 分钟前
实时薪资追踪-每秒都让收入看得见的 Chrome 扩展,你还不来试试?
前端
bnnnnnnnn35 分钟前
看完就懂、懂完就敢讲的「原型与原型链」终极八卦!
前端·javascript·面试
zacksleo38 分钟前
哪些鸿蒙原生应用在使用Flutter
前端·flutter·harmonyos
水煮白菜王39 分钟前
Nginx攻略
前端·nginx