winggundam
Would you like to react to this message? Create an account in a few clicks or log in to continue.

怎麽用MATLAB讀入txt裏的數據?

向下

怎麽用MATLAB讀入txt裏的數據? Empty 怎麽用MATLAB讀入txt裏的數據?

發表 由 lung 周一 10月 31, 2011 1:30 pm

如題。load貌似不行,importdata讀入的是從第二行開始的……

http://www.matlabfan.com/thread-15964-1-1.html
lung
lung
Admin

文章數 : 26098
注冊日期 : 2009-07-12

回頂端 向下

怎麽用MATLAB讀入txt裏的數據? Empty 回復: 怎麽用MATLAB讀入txt裏的數據?

發表 由 lung 周一 10月 31, 2011 1:30 pm

度哥:
[a1,a2]=textread('50136ave.txt','%s%s','headerlines',3) %字符串讀入
%等號左邊是兩列字符串,最右邊3表示
%從第3行讀入


fidin=fopen('test2.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,實際上它不顯示出來



[filename,filepath]=uigetfile('*.txt','Select Input file');
file = [filepath filename];
fid = fopen(file,'rt');
if fid == -1
('Error opening the file')
end
%%讀取文件
while 1

nextline = fgetl(fid); %讀第一行

if ~isstr(nextline), break, end %讀到最後跳出

disp(nextline);%這行可以不要
a = sscanf(nextline, ' %f %f ');%讀取數據,根據你自己的需要改
end
end

for i = 1:100

fileName = ['filename' num2str(i) '.txt'];

x = load(filiName);
lung
lung
Admin

文章數 : 26098
注冊日期 : 2009-07-12

回頂端 向下

怎麽用MATLAB讀入txt裏的數據? Empty 回復: 怎麽用MATLAB讀入txt裏的數據?

發表 由 lung 周一 10月 31, 2011 1:31 pm

有位博主的博客寫得很詳細:
根據txt文檔不同種類介紹不同的讀取數據方法

一、純數據文件(沒有字母和中文,純數字)

對於這種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


“你好
歡迎來到
振動論壇
vib.hit.edu.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 =

'你好'
'歡迎來到'
'振動論壇'
'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
lung
lung
Admin

文章數 : 26098
注冊日期 : 2009-07-12

回頂端 向下

回頂端


 
這個論壇的權限:
無法 在這個版面回復文章