matlab基本操作读取csv文件.docx

上传人:b****6 文档编号:5383100 上传时间:2022-12-15 格式:DOCX 页数:8 大小:17.24KB
下载 相关 举报
matlab基本操作读取csv文件.docx_第1页
第1页 / 共8页
matlab基本操作读取csv文件.docx_第2页
第2页 / 共8页
matlab基本操作读取csv文件.docx_第3页
第3页 / 共8页
matlab基本操作读取csv文件.docx_第4页
第4页 / 共8页
matlab基本操作读取csv文件.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

matlab基本操作读取csv文件.docx

《matlab基本操作读取csv文件.docx》由会员分享,可在线阅读,更多相关《matlab基本操作读取csv文件.docx(8页珍藏版)》请在冰豆网上搜索。

matlab基本操作读取csv文件.docx

matlab基本操作读取csv文件

1、用csvread函数

注意:

csvread函数只试用与用逗号分隔的纯数字文件

第一种:

M=CSVREAD('FILENAME') ,直接读取csv文件的数据,并返回给M

第二种:

M=CSVREAD('FILENAME',R,C) ,读取csv文件中从第R-1行,第C-1列的数据开始的数据,这对带有头文件说明的csv文件(如示波器等采集的文件)的读取是很重要的。

第三种:

M=CSVREAD('FILENAME',R,C,RNG),其中 RNG=[R1C1R2C2],读取左上角为索引为(R1,C1),右下角索引为(R2,C2)的矩阵中的数据。

注意:

matlab认为CSV第1行第1列的单元格坐标为(0,0)

 

给定一个csvlist.csv文件,其内容如下

   02,04,06,08,10,12

   03,06,09,12,15,18

   05,10,15,20,25,30

   07,14,21,28,35,42

   11,22,33,44,55,66

 

例1.1  读取整个文件

csvread('csvlist.csv')

ans=

     2     4     6     8    10    12

     3     6     9    12    15    18

     5    10    15    20    25    30

     7    14    21    28    35    42

    11    22    33    44    55    66

 

例1.2  读取第2行以下,第0列以右区域的数据

m=csvread('csvlist.dat',2,0)

m=

     5    10    15    20    25    30

     7    14    21    28    35    42

    11    22    33    44    55    66

 

例1.3  读取第2行以下,第0列以右,第3行以上,第3列以左区域的数据

m=csvread('csvlist.dat',2,0,[2,0,3,3])

m=

     5    10    15    20

     7    14    21    28

 

2、使用textscan函数

在使用textscan函数前必须用fopen函数打开CSV文件。

textscan函数读取的结果会存在cell数组中。

调用格式

C=textscan(fid,'format')

C=textscan(fid,'format',N)

C=textscan(fid,'format',param,value,...)

C=textscan(fid,'format',N,param,value,...)

C=textscan(str,...)

[C,position]=textscan(...)

关于textscan函数的具体用法见helptextscan。

 

例2.1 读取字符串

str='0.418.243.576.249.27';

C=textscan(str,'%3.1f%*1d');

textscanreturnsa1-by-1cellarrayC:

C{1}=[0.4;8.2;3.5;6.2;9.2]

 

例2.2  读取不同类型的数据

scan1.dat文件内容如下

Sally  Level1  12.34  45  1.23e10  inf   NaN   Yes

Joe    Level2  23.54  60  9e19     -inf  0.001No

Bill   Level3  34.90  12  2e5      10    100   No

 

程序如下

fid=fopen('scan1.dat');

C=textscan(fid,'%s%s�2�%u%f%f%s');

fclose(fid);

 

返回值C是一个1×8的元胞数组,其值如下

C{1}={'Sally';'Joe';'Bill'}          classcell

C{2}={'Level1';'Level2';'Level3'}    classcell

C{3}=[12.34;23.54;34.9]              classsingle

C{4}=[45;60;12]                      classint8

C{5}=[4294967295;4294967295;200000]  classuint32

C{6}=[Inf;-Inf;10]                   classdouble

C{7}=[NaN;0.001;100]                 classdouble

C{8}={'Yes';'No';'No'}               classcell

注意:

C{5}的前两项超出了uint32数值范围,所以只给uint32的数值上限

 

例2.3  去除一列字符串

%去除scan1.dat中地2列的字符串

fid=fopen('scan1.dat');

C=textscan(fid,'%sLevel%u8�2�%u%f%f%s');

fclose(fid);

 

返回一个1×8的元胞数组,其中

C{2}=[1;2;3]                        classuint8

 

例2.4 只读第一列

fid=fopen('scan1.dat');

names=textscan(fid,'%s%*[^\n]');

fclose(fid);

 

返回一个1×1的元胞数组

names{1}={'Sally';'Joe';'Bill'}

 

例子2.5指定的分隔符和空值的换算

data.csv文件内容如下

1,  2,  3,  4,   ,  6

7,  8,  9,   ,11,12

 

程序如下

fid=fopen('data.csv');

C=textscan(fid,'%f%f%f%f%u32%f','delimiter',',',...

             'EmptyValue',-Inf);

fclose(fid);

 

返回一个1×6的元胞数组

C{1}=[1;7]           classdouble

C{2}=[2;8]           classdouble

C{3}=[3;9]           classdouble

C{4}=[4;-Inf]        classdouble (emptyconvertedto-Inf)

C{5}=[0;11]          classuint32 (emptyconvertedto0)

C{6}=[6;12]          classdouble

 

 

例2.6  CSV文件中含有空值和注释

data2.csv内容如下

abc,2,NA,3,4

//CommentHere

def,na,5,6,7

 

分离出注释语句

fid=fopen('data2.csv');

C=textscan(fid,'%s%n%n%n%n','delimiter',',',...

             'treatAsEmpty',{'NA','na'},...

             'commentStyle','//');

fclose(fid);

 

返回1×5的元胞数组

C{1}={'abc';'def'}

C{2}=[2;NaN]

C{3}=[NaN;5]

C{4}=[3;6]

C{5}=[4;7]

 

例2.7 处理重复分隔符

data3.csv 内容如下

1,2,3,,4

5,6,7,,8

 

将multipledelimsasone参数的值赋为1,剔除重复的分隔符

fid=fopen('data3.csv');

C=textscan(fid,'%f%f%f%f','delimiter',',',...

             'MultipleDelimsAsOne',1);

fclose(fid);

 

返回一个1×4的元胞数组

C{1}=[1;5]

C{2}=[2;6]

C{3}=[3;7]

C{4}=[4;8]

 

例2.8 使用collectoutput开关

grades.txt内容如下

Student_ID  |Test1  |Test2  |Test3

   1           91.5     89.2     A

   2           88.0     67.8     B

   3           76.3     78.1     C

   4           96.4     81.2     D

 

collectoutput开关的默认值为0(false)将CSV中的每一列返回到Cell的一列中。

如果将其值设为1(true),则会把相同数据类型的列返回到Cell的一列中。

%默认不开启collectoutput

fid=fopen('grades.txt');

%readcolumnheaders

C_text=textscan(fid,'%s',4,'delimiter','|');

%readnumericdata

C_data0=textscan(fid,'%d%f%f%s')

%开启collectoutput

frewind(fid);

C_text=textscan(fid,'%s',4,'delimiter','|');

C_data1=textscan(fid,'%d%f%f%s',...

                        'CollectOutput',1)

fclose(fid);

 

使用collectoutput后,ID成为cell中的一列,Test1和test2合起来成为cell中的一列,test3成为cell中的一列

C_data0=

[4x1int32]    [4x1double]    [4x1double]    {4x1cell}

C_data1=

    [4x1int32]    [4x2double]    {4x1cell}

frewind的作用是让后面的textscan函数使用前面的fid,一个fid只能让一个textscan读

 

例2.9  使用缺省的控制字符

如果要读的字符串中包含一些控制字符:

\b  Backspace

\n  Newline

\r  Carriagereturn

\t  Tab

\\  Backslash(\)

 

如果你的数据使用不同的控制字符,在调用textscan时能使用sprintf函数显式转换这些控制字符。

 

 

lyric=sprintf('Blackbird\fsinging\fin\fthe\fdead\fof\fnight');

C=textscan(lyric,'%s','delimiter',sprintf('\f'));

 

textscanreturnsa1-by-1cellarrayC:

 

C{1}=

    {'Blackbird';'singing';'in';'the';'dead';'of';'night'}

 

例2.10  读取部分字符串

lyric='Blackbirdsinginginthedeadofnight'

%读取第一个单词:

[firstword,pos]=textscan(lyric,'�',1);

%读剩下的部分

lastpart=textscan(lyric(pos+1:

end),'%s');

 

3、当成数据库使用

具体方法可以去XX“matlab  数据库编程”

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1