Ⅰ 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);
處理當前圖像