一、纯数据文件(没有字母和中文,纯数字)
a=importdata('*.txt');%%%*为所存的文件名
a1=a.data;%%%文件中的数字
a2=a.textdata;%%%文件中的非数字
matlab对txt文件的处理,先行后列,从遇到第一个数字且该数字所在行在该数字后面的部分全为数字,则该数字列前面的列全作为字符串处理CELL对象,该数字及该行后面数字下面的列作为DOUBLE数字存储.如果一字符串按上述规则该作为数字,且该字符串所在行已经有一列作为数字处理,则将该字符作为NAN,并将以后所有行忽略,如果该字符串所在列为该按数字处理的第一列,则将该行全作字符串处理,并将该行及以下所有行忽略.
第一个有当做数字处理的行上面的列会主动与数字列匹配,如果匹配不完全,就将上面的行当成一个字符串处理.
经过以上处理后的结果存入a中
如:对于 a w 3
4 5 5
3 4 d读进a的数据为a.textdata='a w','4 5';a.data=3 3
对于 a w e
r 5 4
4 5 7 a.textdata={'a' 'w' 'e';'r' ' ' ' ';'4' ' ' ' '};a.data={5 4;5 7}
对于a w e
4 5 6
3 r t a.textdata='a' 'w' 'e';a.data={4 5 6;3 NaN NaN}
对于a w e
4 5 6
d 3 5 a.textdata='a' 'w' 'e';data=4 5 6
对于a w
4 5 6
5 6 i a.textdata='a w';data={4 5 6;5 6 NaN}
对于a w
4 5
4 5 6 a.textdata='a' 'w ';data={4 5;4 5}
对于这种txt文档,从matalb中读取就简单多了
例如test.txt文件,内容为“17.901 -1.1111 33.045
17.891 -1.1286 33.045
17.884 -1.1345 33.045”
保存在D盘,则可以在command window中输入load D:\test.txt ,然后就会产生一个test的数据文件,内容跟test.txt中的数据一样;另一种方法是在file/import data....../next/finish 也可产生一个叫test的数据文件。command window中输入:a=importdata('D:\test.txt') 按Enter 则显示
二、中英文和数据如test1.txt
“你好
欢迎来到
振动论坛
vib.hit.edu.cn
1 11 111 1111
2 22 222 2222
3 33 333 3333
4 44 444 4444
5 55 555 5555”保存为D:\abc4.txt
这样的文件怎么读入数据呢?
方法有多种,现举两个比较简单实用的。
方法一:
a=importdata('D:\abc4.txt');
>> whos
Name Size Bytes Class
data 5x4 160 double array
textdata 4x1 300 cell array
Grand total is 54 elements using 460 bytes
>> a1=a.data
a1 =
1 11 111 1111
2 22 222 2222
3 33 333 3333
4 44 444 4444
5 55 555 5555
>>a2=a. textdata
a2 =
'你好'
'欢迎来到'
'振动论坛'
'vib.hit.edu.cn'
方法二:[a1,a2,a3,a4]=textread('test1.txt','%s%s%s%s','headerlines',4)
说明:%s可以是其他形式,跟读入的数据类型有关,比如这里也可以用%n,%f等。
这里%s的个数和[a1,a2,a3,a4]对应。
>> [a1,a2,a3,a4]=textread('test1.txt','%s%s%s%s','headerlines',4)
a1 =
'1'
'2'
'3'
'4'
'5'
a2 =
'11'
'22'
'33'
'44'
'55'
a3 =
'111'
'222'
'333'
'444'
'555'
a4 =
'1111'
'2222'
'3333'
'4444'
'5555'
因以字符串的形式读入,所以有''。
————————————————————————————————
三、中文 数据 英文 混乱如test.txt
你好
1 11 111 1111
欢迎来到
2 22 222 2222
振动论坛
3 33 333 3333
vib.hit.edu.cn
4 44 444 4444
5 55 555 5555
说明:这种内容格式的文件用上面的方法是不行的。
以下是由chinamaker编写的一种方法:
fidin=fopen('test.txt'); % 打开test2.txt文件
fidout=fopen('mkmatlab.txt','w'); % 创建MKMATLAB.txt文件
while ~feof(fidin) % 判断是否为文件末尾
tline=fgetl(fidin); % 从文件读行
if double(tline(1))>=48&&double(tline(1))<=57 % 判断首字符是否是数值
fprintf(fidout,'%s\n\n',tline); % 如果是数字行,把此行数据写入文件MKMATLAB.txt
continue % 如果是非数字继续下一次循环
end
end
fclose(fidout);
MK=importdata('MKMATLAB.txt'); % 将生成的MKMATLAB.txt文件导入工作空间,变量名为MK,实际上它不显示出来
>> MK
MK =
1 11 111 1111
2 22 222 2222
3 33 333 3333
4 44 444 4444
5 55 555 5555