【matlab】 从csv复杂文件中提取数据到数组 您所在的位置:网站首页 matlab导出csv数据 【matlab】 从csv复杂文件中提取数据到数组

【matlab】 从csv复杂文件中提取数据到数组

2024-01-22 00:53| 来源: 网络整理| 查看: 265

在工作中遇到,需要将csv文件中的数据提取出来,但csv文件中结构较为复杂,里面除了表头之外,还有一些说明信息。如果用

excel打开之后可以发现数据中是用-Infinity来代替负无穷,但是在matlab中是使用-Inf来表示,所以我们需要对其进行字符串的替换。

我们所想要的只有数据部分,将其导入matlab中为如下形式,可以看到是一个double数组类型。由于没有直接的函数能够进行处理,

中间需要不同数据类型table,cell,string,char,double数据类型之间的转换。

1)首先使用readtable()函数读入文件

在matlab官方文档中,我们可以看到在2020a之后的版本中,readtable函数可以自动区分表头数据,多余数据和数据。

我这里使用的就是2020b版本,相较于之前的2016,也会有运行速度上的提升。

这样我们就可以得到一个table型数据,包含表头和数据。和cell型数据类似,也有两种读取方式,一个是(),一个是{}。

使用()时,读取的都是table型数据,{}读取的类型就是数据本身的类型。从表中看到,在使用readtable函数后,我们

得到的第一列数据为double类型,而第二列为char类型(因为是用单引号标注的)。因此后面我们会单独对两列提取,

然后合并在一起得到我们想要的数据。

2)提取第一列

利用{}的特性,我们可以通过直接得到double数组。

firstline = struct{:,1};

3)提取第二列

secondline = struct{:,2};

此时数据为cell型数据,我们想使用strrep函数进行字符串数组的替换,因此先将其转化为string型数据。

secondline = strrep(string(secondline),“nfinity“,“Inf”);

4)通过char()函数补齐字符串数组长度

下面再通过str2num函数就能够得到double数组了。但是str2num的输入字符串数组要求每一个字符串的

长度是相同的,而”-Inf”长度是4,“-3203.0622”长度是10,所以不能直接使用。这里我们使用一个简单的技

巧来补齐字符串数组的长度,就是使用char()函数。这里就要讲到char和string数据类型之间的区别了。

首先char是使用单引号声明的,而string是使用双引号。并且二者的行为也是不同的,前者是离散的,后者

是一个整体。

可以看到char函数自动将二者的长度补齐到6,并且char和string的读取结果也不同。

现在我们使用char函数补齐第二列数据的长度并转化为double数组。

secondline = str2num(char(secondline));

5)合并两列

data = [firstline,secondline];



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有