转换 CSV 数据以在类内访问

Posted

技术标签:

【中文标题】转换 CSV 数据以在类内访问【英文标题】:Converting CSV data for access inside classes 【发布时间】:2021-08-01 08:48:46 【问题描述】:

我正在尝试开发 TypeScript 类来访问 csv 文件中的数据。原始电子表格如下所示:

我把它转换成 CSV 文件,然后像这样快速解析它:

import fs from "fs";

const data = fs.readFileSync("Data-Table 1.csv", 
  encoding: "utf-8",
);

console.log(data);

但如果它看起来像这样:

[start:run] 1848,,,432-444 W. Ocean Blvd,4,1312-03,-888,,432-444 W. Ocean Blvd,“证明减轻负面声明的建议 (MND 01- 14) 根据 CEQA 指南并批准场地规划审查、当地沿海开发许可证和归属试探性地图,用于在三层停车场内建造一个由 95 个住宅单元和 153 个停车位组成的八层住宅公寓综合体车库位于市中心海岸线规划开发区 PD-6 分区 4 中的 442 W. Ocean Boulevard。Vesting Tentative Tract Map 用于将两个地块合并为一个地面空间地块和位于 432-444 W. Ocean Boulevard 的两个空域地块. (District 2) (Application No. 1312-03)",-888,2,-999,-999,-999,LUD 7 - Mixed Use,PD-6,2,"地面停车场;办公楼、办公室塔",-999,-999,-999,0,0,0,23522,-888,95,0,-999, 1 ,2,153,19,80,-999,0,1,43,21,25 ,6,0,0,0,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,0,-888,-888, -999,-999,-999,-9 99,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999, -999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999 ,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,1,0,-999,-999,12/5/2013, 5/21/2015,-999,-999,-999,-999,-999,-999,-999,-999,-999,1,12/5/2013,5/21/2015,1,12 /5/2013,5/21/2015,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999, -999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,1,-999,-999,,,-999,-888,12 /5/2013,5/21/2015,532d,-999,-999,4,2,-999,-888,0,-999,-999,-999,-999,0,-999,-999 ,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,-999,- 999,-999,-999,33.767216946954,-118.197018766954,,,,,,,,,

整个电子表格中有很多 -999 什么都不做,没用。

但我想做的是把它开发成我可以通过 TypeScript 类访问的数据结构。

所以我的想法是数据需要理想地看起来像这样:

const data = [
  Address: '123 Main Street', Development_Plan: 'Downtown' ,
  Address: '21 Peaceful Way', Development_Plan: 'Residential' ,
];

我应该如何将我的 CSV 数据转换成上述格式?

我正在寻找示例代码。我尝试了其他方法,例如对这个字符串 blob 调用 split 并将它们转换为字符串数组,然后映射到每个单独的字符串,在逗号上拆分,最终得到一个二维字符串。

显然,我当然去了我在上面寻找的东西。

【问题讨论】:

【参考方案1】:

我还没有测试过,但它应该可以工作

class Data 
    address: string;
    developmentPlan: string;

    static DELIMITER = ",";

    constructor(rawRow: string) 
        const data= rawRow.split(Data.DELIMITER);

        this.address = data[8];
        this.developmentPlan = data[9]; // change the index based on the cols position
    


const ROW_DELIMITER = "\r\n";

const rawData = fs.readFileSync("Data-Table 1.csv", 
    encoding: "utf-8",
);

const data: Data[] = [];

for (const rawRow of rawData.split(ROW_DELIMITER)) 
    data.push(new Data(rawRow));


console.log(data);

【讨论】:

无论如何这可以写在我不必将rawRow: string 传递给构造函数的地方吗?在哪里我根本不需要将任何东西传递给构造函数?

以上是关于转换 CSV 数据以在类内访问的主要内容,如果未能解决你的问题,请参考以下文章

c++

类成员

c++ 三大特性之继承

Java内部类

TypeScript 学习三 类

访问修饰符