matlab funtion.docx
- 文档编号:25250487
- 上传时间:2023-06-06
- 格式:DOCX
- 页数:17
- 大小:20.06KB
matlab funtion.docx
《matlab funtion.docx》由会员分享,可在线阅读,更多相关《matlab funtion.docx(17页珍藏版)》请在冰豆网上搜索。
matlabfuntion
textread
基本语法是:
[A,B,C,…]=textread(filename,format)
[A,B,C,…]=textread(filename,format,N)
其中filename就是文件名,format就是要读取的格式,A,B,C就是从文件中读取到的数据。
必须严格遵守用法不可出现data=textread(filename,format,N)的形式
其中括号里面变量的个数必须和format中定义的个数相同。
如果每N行相同格式的数据,可采用[A,B,C,…]=textread(filename,format,N)的语法,读取N次。
_______________________________________________________________________________________
注:
textread不用先fopen那个文件,适用于格式统一的txt文件的一次性大批量读取。
textread读取某个文件后,下次再用textread读取这个文件时,还是会从文件头开始读取。
________________________________________________________________________________________
例如:
.....................................................................................
例1:
无分隔符
mytest.txt
1 2 3 4
5 6 7 8
9 10 11 12
读取:
>>[data1,data2,data3,data4]=textread('mytest.txt','%n%n%n%n');
>>data=[data1data2data3data4]
data=
1 2 3 4
5 6 7 8
9 10 11 12
或者,[data1,data2,data3,data4]=textread(filename,'%n%n%n%n',3);%注意3为读取次数,应该是行数
....................................................................................
例2:
有分隔符(逗号,分号...)
myfile.txt中的内容如下:
1,2,3,4
5,6,7,8
9,10,11,12
读取:
>>[data1,data2,data3,data4]=textread('myfile.txt','%n%n%n%n','delimiter',',')
>>data=[data1data2data3data4]
data=
1 2 3 4
5 6 7 8
9 10 11 12
这里delimiter是指指出分隔符,读数据的时候会自动跳过分隔符。
至此应该知道Iris.txt怎么读入了吧。
[data1,data2,data3,data4,data5]=textread('Iris.txt','%f%f%f%f%s','delimiter',',');
需要注意的是,参数位置要和textread函数用法对应
[A,B,C,…]=textread(filename,format,N)也就是filename,format,N三个参数必须在其他参数前面,所以150才会出现在format后
例如:
[data1,data2,data3,data4,data5]=textread('Iris.txt','%f%f%f%f%s',150,'delimiter',',');
..............................................................................
例3:
有分隔符及首行注释
myfiles.txt中的内容如下:
%thisacomment
1,2,3,4
5,6,7,8
9,10,11,12
>>[data1,data2,data3,data4]=textread('myfiles.txt','%n%n%n%n','delimiter',',','headerlines',1);
>> data=[data1data2data3data4]
data=
1 2 3 4
5 6 7 8
9 10 11 12
textread中的headerlines指明了跳过几行,1可自由设定
这里headerlines告诉textread跳过一开始的1行,1可以替换为任意你要跳过的行数。
..............................................................................
例4:
针对txt文件不同格式数据的读取
myfile.txt中的内容如下:
SallyLevel112.3445Yes
读入:
[names,types,x,y,answer]=textread('myfileli4.txt','%s%s%f%d%s',1);
对应格式[A,B,C,…]=textread(filename,format,N)
_________________________________________________________________________________
例4.1:
如果要忽略12.34这个浮点数。
[names,types,y,answer]=textread('myfileli4.txt','%s%s%*f%d%s',1)
%*f告诉textread跳过一个浮点数。
names=
'Sally'
types=
'Level1'
y=
45
answer=
'Yes'
对于iris.txt如果只想读取数据可用[data1,data2,data3,data4]=textread('Iris.txt','%f%f%f%f%*s',150,'delimiter',',');
____________________________________________________________________________________________
例:
4.2 如果要忽略Level,指读取后面的数字,
>>[names,levelnum,x,y,answer]=textread('myfileli4.txt','%sLevel%d%f%d%s',1)
names=
'Sally'
levelnum=
1
x=
12.3400
y=
45
answer=
'Yes'
________________________________________________________________________________________________
..............................................................OK...............................................
例5:
txt中存在空位
myfileli5.txt中的内容如下
1,2,3,4,,6
7,8,9,,11,12
想用nan替代为空的部分
如下:
>>[data1data2data3data4data5data6]=textread('myfileli5.txt','%f%f%f%f%f%f','delimiter',',','emptyvalue',NaN)
>>data=[data1data2data3data4data5data6];
>>data
data=
1 2 3 4 NaN 6
7 8 9 NaN 11 12
....................................................................................................................
例6:
跳列
myfileli6.txt中的内容如下
SallyType112.3445Yes
JoeType223.5460No
BillType134.9012No
如果只想读第一列,其余的跳过
读入:
>>clear
>>[names]=textread('myfileli6.txt','%s%*[^\n]');
>>names
names=
'Sally'
'Joe'
'Bill'
%[^\n]就是一直读到行尾。
如:
>>[namesrest]=textread('myfileli6.txt','%s%[^\n]')
names=
'Sally'
'Joe'
'Bill'
rest=
'Type112.3445Yes'
'Type223.5460No'
'Type134.9012No'
%*[^\n]就是从当前直接跳到行尾。
%*是一个跳过符号,表示跳过该位
....................................................................................
例7:
读入规律格式的数据
myfileli7.txt中的内容如下
Location;date;discharge
Lobith;1989-01-01;00:
00;2801
Lobith;1989-01-02;00:
00;2619
读入:
[locationyearmonthdayhourminutedischarge]=textread('myfileli7.txt','%s%f-%f-%f%f:
%f%f','headerlines',1,'delimiter',';');
如下:
>>clear
>>[locationyearmonthdayhourminutedischarge]=textread('myfileli7.txt','%s%f-%f-%f%f:
%f%f','headerlines',1,'delimiter',';')
location=
'Lobith'
'Lobith'
year=
1989
1989
month=
1
1
day=
1
2
hour=
0
0
minute=
0
0
discharge=
2801
2619
下面开始textscan函数,其实基本和textread差不多,但是其加入了更多的参数,有了很多优势
一下是小小区别(来自XX知道):
textscan更适合读入大文件;
textscan可以从文件的任何位置开始读入,而textread只能从文件开头开始读入;
textscan也可以从上一次textscan结束的位置开始读入,而textread不能;
textscan只返回一个数组(其实应该说是一个细胞矩阵),而textread要返回多个数组(嗯嗯);
textscan提供更多转换读入数据的选择;
textscan提供给用户更多的配置参数。
咳咳,下面就是我自己的内容了,虽然原始版本是matlab帮助文件中的,但是鉴于现在没有完全的汉化版,好歹也是我自己翻译然后运行的,还有更加详细的讲解和我自己的理解内容,所以转载请注明出处
textscan函数
功能:
读格式的数据从文本文件或字符串。
适用于具有多行文字说明文本数据文件。
————————————————————————————————————————
基本用法:
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(...)
——————————————————————————————————————
输入参数
fid 为fopen命令返回的文件标识符,这也是和textread的最大不同之处
需要注意的一点是,fid类似一个指针,其指向的位置会随着textscan的操作而改变,参见例9
format 是一个字符串变量,表示读取数据及数据转换的规则,具体见format.txt
N 读取N次,一般为行数
输出参数
输出一个细胞数组C
基本与textread语法相同
.............................................................................
例1:
'mydata1.txt文件如下
SallyLevel112.34451.23e10infNanYes5.1+3i
Joe Level223.54609e19-inf 0.001No2.2-.5i
Bill Level334.90122e5 10 100 No3.1+.1i
读入:
>>fid=fopen('mydata1.txt');
C=textscan(fid,'%s%s�2�%u%f%f%s%f');
fclose(fid);
>>C
C=
Columns1through5
{3x1cell} {3x1cell} [3x1single] [3x1int8] [3x1uint32]
Columns6through9
[3x1double] [3x1double] {3x1cell} [3x1double]
输出C为1*9的细胞数组,每个数组中存放每列的数据
..................................................................
例2:
可设置读取长度,具体是,在%和格式符之间插入数字N,代表你要读入几个数值(有点问题)
如:
>>dd='letusgo';
>>ddd=textscan(dd,'\')
ddd=
'letu'
对于myfileli6.txt
SallyType112.3445Yes
JoeType223.5460No
BillType134.9012No
>>fid=fopen('myfileli6.txt');
>>data=textscan(fid,'%s%s%f%f%s',3);%正常读入数据
....................注意对于数据省略操作应该跳过被省略部分.........
例:
str='0.418.243.576.249.27';
C=textscan(str,'%3.1f');
C会出现这种情况
C=
0.400000000000000
1
8.20000000000000
4
3.50000000000000
7
6.20000000000000
4
9.20000000000000
7
而
>>C=textscan(str,'%3.1f%*1d');
>>C{1}
ans=
0.4000
8.2000
3.5000
6.2000
9.2000
......................................................
例3:
读取不同格式的数据
scan1.txt如下
09/12/2005Level112.34451.23e10infNanYes5.1+3i
10/12/2005Level223.54609e19-inf 0.001No2.2-.5i
11/12/2005Level334.90122e5 10 100 No3.1+.1i
现在把scan1.txt读入
fid=fopen('scan1.dat');
C=textscan(fid,'%s%s�2�%u%f%f%s%f');
fclose(fid);
输出C为一个1*9的细胞矩阵
C{1}={'09/12/2005';'10/12/2005';'11/12/2005'}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{9}=[5.1+3.0i;2.2-0.5i;3.1+0.1i] classdouble
C{5}中的4294967295指的是32位系统无符号整型的最大值2^32-1
也可以把C{1}中的内容分别读入
>>fid=fopen('scan1.txt');
>>C=textscan(fid,'%f/%f/%f%s�2�%u%f%f%s%f');
>>fclose(fid);
>>C{1}'
ans=
9 10 11
>>C{2}'
ans=
12 12 12
>>C{3}'
ans=
2005 2005 2005
........一下相同.....
............................................................
例4:
移除字符串
对于上述scan1.txt如果想忽略Level而直接读取数字
>>fid=fopen('scan1.txt');
>>C=textscan(fid,'%sLevel%u8�2�%u%f%f%s%f');
>>fclose(fid);
>>C{2}'
ans=
1 2 3
....................................................................
例5:
读取某列
>>fid=fopen('scan1.txt');
dates=textscan(fid,'%s%*[^\n]');
fclose(fid);
>>dates{1}
ans=
'09/12/2005'
'10/12/2005'
'11/12/2005'
dates是一个1*1的细胞矩阵
%[^\n]就是一直读到行尾。
如:
>>fid=fopen('scan1.txt');
>>dates=textscan(fid,'%s%[^\n]');
>>fclose(fid);
>>dates{1}'
ans=
'09/12/2005' '10/12/2005' '11/12/2005'
>>dates{2}
ans=
'Level112.34451.23e10infNanYes5.1+3i'
'Level223.54609e19-inf 0.001No2.2-.5i'
'Level334.90122e5 10 100 No3.1+.1i'
%*[^\n]就是从当前直接跳到行尾。
%*是一个跳过符号,表示跳过该位
............................................................................
例6:
处理存在空数据
实用分节符delimiter和空值符EmptyValue
对于exm5.txt
1, 2, 3, 4, , 6
7, 8, 9, ,11,12
读取数据,空数据用-inf替换
>>fid=fopen('exm5.txt');
C=textscan(fid,'%f%f%f%f%f%f','delimiter',',','EmptyValue',-Inf);
fclose
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matlab funtion