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

相关推荐
web守墓人32 分钟前
【前端】ikun-markdown: 纯js实现markdown到富文本html的转换库
前端·javascript·html
Savior`L37 分钟前
CSS知识复习5
前端·css
许白掰38 分钟前
Linux入门篇学习——Linux 工具之 make 工具和 makefile 文件
linux·运维·服务器·前端·学习·编辑器
中微子5 小时前
🔥 React Context 面试必考!从源码到实战的完整攻略 | 99%的人都不知道的性能陷阱
前端·react.js
中微子6 小时前
React 状态管理 源码深度解析
前端·react.js
加减法原则7 小时前
Vue3 组合式函数:让你的代码复用如丝般顺滑
前端·vue.js
yanlele8 小时前
我用爬虫抓取了 25 年 6 月掘金热门面试文章
前端·javascript·面试
lichenyang4538 小时前
React移动端开发项目优化
前端·react.js·前端框架
你的人类朋友8 小时前
🍃Kubernetes(k8s)核心概念一览
前端·后端·自动化运维
web_Hsir8 小时前
vue3.2 前端动态分页算法
前端·算法