matlab基本操作,读取csv文件
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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 = [R1 C1 R2 C2],读取左上角为索引为(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函数的具体用法见help textscan。
例2.1读取字符串
str = '0.41 8.24 3.57 6.24 9.27';
C = textscan(str, '%3.1f %*1d');
textscan returns a 1-by-1 cell array C:
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.001 No
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'} class cell
C{2} = {'Level1'; 'Level2'; 'Level3'} class cell
C{3} = [12.34; 23.54; 34.9] class single
C{4} = [45; 60; 12] class int8
C{5} = [4294967295; 4294967295; 200000] class uint32
C{6} = [Inf; -Inf; 10] class double
C{7} = [NaN; 0.001; 100] class double
C{8} = {'Yes'; 'No'; 'No'} class cell
注意:C{5}的前两项超出了uint32数值范围,所以只给uint32的数值上限
例2.3去除一列字符串
%去除scan1.dat中地2列的字符串
fid = fopen('scan1.dat');
C = textscan(fid, '%s Level%u8 �2 � %u %f %f %s');
fclose(fid);
返回一个1×8的元胞数组,其中
C{2} = [1; 2; 3] class uint8
例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);