Ⅰ matlab如何读取其中的一部分文件
一、纯数据文件(没有字母和中文,纯数字)
对于这种txt文档,从matalb中读取就简单多了
例如test.txt文件,内容为
17.901 -1.1111 33.045
17.891 -1.1286 33.045
17.884 -1.1345 33.045
可以在command window中输入load test.txt ,然后就会产生一个test的数据文件,内容跟test.txt中的数据一样;另一种方法是在file/import data....../next/finish 也可产生一个叫test的数据文件。
二、中英文和数据如test1.txt
你好
欢迎来到
论坛
e.cn
1 11 111 1111
2 22 222 2222
3 33 333 3333
4 44 444 4444
5 55 555 5555
这样的文件怎么读入数据呢?
方法有多种,现举两个比较简单实用的。
方法一:
file/import data....../next/finish
>> whos
Name Size Bytes Class
data 5x4 160 double array
textdata 4x1 300 cell array
Grand total is 54 elements using 460 bytes
>> data
data =
1 11 111 1111
2 22 222 2222
3 33 333 3333
4 44 444 4444
5 55 555 5555
>> textdata
textdata =
'你好'
'欢迎来到'
'论坛'
'e.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
e.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
---------------------------------------------------------------
我的txt数据里既有数字又有字符串,形式为:
0.129515 DDAA 01 2.24609 94.50000 98
0.130434 DDAA 01 2.24609 96.30000 9A
0.131441 DDAA 01 2.24609 97.20000 9B
0.132448 DDAA 01 2.24609 99.00000 9D
0.133507 DDAA 01 2.24609 100.80000 9F
0.134515 DDAA 01 2.24609 101.70000 A0
............
我只想要第一列,第四列,第五列。
也就是0.129515 2.24609 94.50000 这3列数,
怎样导入matlab啊?
假设数据在data.txt里,且位于当面matlab路径里,用下面这句就可以了
[col1,col2,col3]=textread('data.txt','%f %*s %*d %f %f %*s',-1);
Ⅱ MATLAB怎样提取文件指定内容
1、hsv或者rgb模型 网上找找代码试试
2、目测是苹果等级的分类
建议提取苹果用rgb模型,为了保证精确度单纯的r分量建议用hsv
如有其他问题,可以继续追问,您的采纳是我前进的动力!
Ⅲ 请教如何用matlab去读取内容不规则的文本文件的数据
%%方法比较笨
fid=fopen('d:\data.txt','r');
NumLine=0;
datax=[];
datay=[];
dataz=[];
while(~feof(fid))
lineinfo=fgetl(fid);%读一行数据
NumLine=NumLine+1;
if (NumLine<=14) %去掉文件头,因为文件头中含有XYZ会对下面编程造成很大干扰,你这个要修改文件头的行数
continue;
end
if (isempty(lineinfo))
continue; %空行,重新读下一行
end
flag=0;
xlocal=findstr(lineinfo,'X'); %假定一行最多只能有一个关键字符X,另外这里是区分大小写的
if (~isempty(xlocal))
xx=sscanf(lineinfo(xlocal:end),'X%f');
flag=1;
else
xx=0;
end
ylocal=findstr(lineinfo,'Y'); %假定一行最多只能有一个关键字符X,另外这里是区分大小写的
if (~isempty(ylocal))
yy=sscanf(lineinfo(ylocal:end),'Y%f');
flag=1;
else
yy=0;
end
zlocal=findstr(lineinfo,'Z'); %假定一行最多只能有一个关键字符X,另外这里是区分大小写的
if (~isempty(zlocal))
zz=sscanf(lineinfo(zlocal:end),'Z%f');
flag=1;
else
zz=0;
end
if (flag==1) %表明至少找到一个XYZ
datax=[datax;xx];
datay=[datay;yy];
dataz=[dataz;zz];
end
end
fclose(fid);
fid=fopen('d:\dataxyz.txt','w');
for i=1:length(datax)
fprintf(fid,'%f\t%f\t%f\r\n',datax(i),datay(i),dataz(i)); %这里用\r\n是方便计算本查看。事实上\n就可以了
end
fclose(fid);
=====================修改版=================
%%逻辑判断比较复杂
fid=fopen('d:\data.txt','r');
NumLine=0;
datax=[];
datay=[];
dataz=[];
while(~feof(fid))
lineinfo=fgetl(fid);%读一行数据
NumLine=NumLine+1;
if (isempty(lineinfo))
continue; %空行,重新读下一行
end
flag=0;
xlocal=findstr(lineinfo,'X'); %假定一行最多只能有一个关键字符X,另外这里是区分大小写的
if (~isempty(xlocal) && ( (lineinfo(xlocal+1)>='0' && lineinfo(xlocal+1)<='9') || lineinfo(xlocal+1)=='-'))
xx=sscanf(lineinfo(xlocal:end),'X%f');
flag=1;
else
xx=0;
end
ylocal=findstr(lineinfo,'Y');%假定一行最多只能有一个关键字符X,另外这里是区分大小写的
if (~isempty(ylocal) && ((lineinfo(ylocal+1)>='0' && lineinfo(ylocal+1)<='9') || lineinfo(ylocal+1)=='-'))
yy=sscanf(lineinfo(ylocal:end),'Y%f');
flag=1;
else
yy=0;
end
zlocal=findstr(lineinfo,'Z');%假定一行最多只能有一个关键字符X,另外这里是区分大小写的
if (~isempty(zlocal) && ((lineinfo(zlocal+1)>='0' && lineinfo(zlocal+1)<='9') || lineinfo(zlocal+1)=='-'))
zz=sscanf(lineinfo(zlocal:end),'Z%f');
flag=1;
else
zz=0;
end
if (flag==1) %表明至少找到一个XYZ
datax=[datax;xx];
datay=[datay;yy];
dataz=[dataz;zz];
end
end
fclose(fid);
fid=fopen('d:\dataxyz.txt','w');
for i=1:length(datax)
fprintf(fid,'%f\t%f\t%f\r\n',datax(i),datay(i),dataz(i)); %这里用\r\n是方便计算本查看。事实上\n就可以了
end
fclose(fid);
Ⅳ Matlab读取TXT文件并跳过中间几行的问题!!
不知道你数据中有数值也有字符如何运算,不过下面的程序能把数字开头的行所有内容读到元胞数组中
clear;
fid=fopen('test.dat','r');
dat=cell(22,10);
recst=logical(0);
linnum=1;
while 1
if(feof(fid));break;end;
str=fgetl(fid);
ind=findstr(str,' ');
if(~isempty(ind))
recst=logical(1);
else
recst=logical(0);
if(linnum~=1)
% one group of data ends here, do your calculation
end
end
if(recst)
ind=[0,ind,length(str)+1];
for ii=1:length(ind)-1
dat{linnum,ii}=str2num(str(ind(ii)+1:ind(ii+1)-1));
if(isempty(dat{linnum,ii}));dat{linnum,ii}=str(ind(ii)+1:ind(ii+1)-1);end
end
linnum=linnum+1;
end
end
fclose(fid);
如果需要,也可以只取其中的数值。原理就是读出每一行中的空格,作为分隔符。
Ⅳ 怎样在matlab里读取的txt文件中提取字符串
直接File——Import Data,设置列分隔符,然后next——finish即可
Ⅵ matlab 如何读取文件时跳过找不到的文件继续读取后面的文件
%%
for index='a':'z'
filename=[index,'.txt'];
if (exist(filename) ~= 0)
% 检测文件是否存在,如果存在再执行load操作
load(filename);
end
end
Ⅶ Matlab 读取文件时碰到损坏文件时,如何跳过此文件并继续读取后面文件,并最后提醒哪个文件损坏
首先,要知道文件损坏是什么意思,文件损坏说明这个文件存在只是不可读,读入的信息满足不了要求
Ⅷ matlab中读取文本中数据时如何跳过某几行或某几列
用指针方式
fgetl读取一行,用str2num判断读取的内容大小,一个即表示是题头的0,多个就是要的数据,数据输出用save和fprintf等都可以
只是提供一个思路,查查帮助看函数使用方法.
Ⅸ Matlab中如何批量读取文件夹中的文件进行处理
1 图像按编号命名:1.jpg, 2.jpg,....,n.jpg
2 循环读图
I=cell(1,n);
for i=1:n
imageName=strcat(num2str(i),'.jpg');
I{i} = imread(imageName);
end
3 处理图像
-----------------------
如果图像很多,那么最好这样,第二步和第三步合并
for i=1:n
imageName=strcat(num2str(i),'.jpg');
I = imread(imageName);
处理当前图像