【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文件,手动解析可能会比较慢,而使用优化的第三方库可能会更快。

相关推荐
IT_陈寒23 分钟前
Redis缓存击穿把我整不会了,原来还有这手操作
前端·人工智能·后端
idcu1 小时前
深入 Lyt.js 组件系统:L2 渲染引擎层的核心
前端·typescript
这是程序猿1 小时前
Spring Boot自动配置详解
java·大数据·前端
文心快码BaiduComate1 小时前
干货|Comate Harness Engineering工程实践指南
前端·后端·程序员
还有多久拿退休金1 小时前
一张栈的图,治好你面试答不出 script 阻塞的病
前端·javascript
光辉GuangHui1 小时前
Agent Skill 也需要测试:如何搭建 Skill 评估框架
前端·后端·llm
To_OC1 小时前
我终于搞懂 Claude Code 核心逻辑!90%的人都用错了模式
前端·ai编程
蓝宝石的傻话1 小时前
Headless浏览器的隐形陷阱:为什么你的AI自动化工具抓不到页面早期错误?
前端
irving同学462381 小时前
Node 后端实战:JWT 认证与生产级错误处理
前端·后端
莽夫搞战术2 小时前
【Google Stitch】AI原生画布重新定义设计,让想法变成可交互界面
前端·人工智能·ui