ilovematlab論壇最常見的問題top200
一、如何讀取乙個文件下,多個txt
檔案?
一般讀取的檔案,命名都具有一定的規律,除去相同部分,剩下的變化按照時間、序號、某一特定的標誌符等進行排列。
下面我們舉個例子來操作。
假如資料夾裡存在以下檔案:
cs20170701
cs20170702
cs20170703
cs20170704
…cs20170731
標籤:cs
代表產品型別,數字代表年月日。總共31個檔案
意義:整個生產部門在2023年7月份的生產記錄表
分析內容:首先我們觀察所有的檔案,它們具有相同部分:產品型別和年月,變化的部分只有日子數,那麼,我們就可以使用乙個迴圈來讀取所有的txt
檔案,且儲存得有規律。
參考函式:loadtextread
num2str
解決方案:
data=
cell(1
,31);
%建立乙個儲存空間
for num=1:
9if num<
10 data
=textread([
'cs2017070'
num2str
(num)
'.txt'])
;%將每日的資料分別存在乙個cell空間內
else
data
=textread([
'cs201707'
num2str
(num)
'.txt'])
; end
end
二、乙個txt
檔案裡全是數字資料的讀取?
例如sq.txt
檔案內容為:
1 20.1 574 21
2 7541 12 24
3 45 21 45
4 32 12 54.2.
5 35.1 45.0 45.0
解決方案:
load sq.txt
三、在問題二的基礎上存在第一行資料為中文?
例如sq2.txt
檔案內容為:
編號 長 寬 高
1 20.1 574 21
2 7541 12 24
3 45 21 45
4 32 12 54.2
5 35.1 45.0 45.0
標籤:同問題2
分析內容:這裡的檔案內容,存在了一行中文漢字,load函式將不再適用,這裡我們需要分為兩個部分處理:1、中文處理;2、數字處理。
參考函式:textread
importdata
解決方案:
%方案一
data=
textread
('sq2.txt'
,'%s');
%讀取檔案
data=
str2num
(char
(data(5
:end)))
;%刪除中文,並將cell轉換成數字
data=
reshape
(data,4,
length
(data)/4
)';%重新按照格式排列
%方案二
data=
importdata
('sq2.txt');
%讀取的文字存在struct內,data為數字,textdata為中文
data=data.data;
%提取struct中的data
四、讀取中文與數字混合檔案?
一般此種檔案格式為: 中文1:***, 中文2:***, 中文3:***,
例如sq3.txt
檔案內容為:
編號:1 長:20.1 寬:574 高:21
編號:2 長:7541 寬:12 高:24
編號:3 長:45 寬:、21 高:45
編號:4 長:32 寬:12 高:54.2
編號:5 長:35.1 寬:45.0 高:45.0
解決方案:
fid=
fopen
('sq3.txt'
,'r');
%唯讀data=
fscanf
(fid,
'編號:%d 長:%f 寬:%f 高:%f\n',[
1 inf]);
%按照讀取檔案的標準格式來寫
fclose
(fid)
;%關閉
data=
reshape
(data,4,
length
(data)/4
)';%重新按照格式排列
五、檔案內容存在缺損(1)
在某些產品檢測時,得到的資料可能存在缺損值,即某個標籤下的值不存在。
例如sq4.txt
檔案內容為:
123.1,754,124,12,57
13,754.5,124,12,57.7
23,754,124.2,12,
12,754,12,57.8
13,754,12.4,12,57
12.5,754,124,12,57.6
標籤:每行總共5個數字,分別代表5個屬性,分別用逗號隔開。但是因為某些原因,存在缺損值,缺損值也是有逗號隔開了的。第三行缺第5個值,第四行缺第3個值
分析內容:這種缺損值,只是簡單的數字值缺損,結構簡單,缺損值少。
關鍵函式:importdata
解決方案:
data=
importdata
('sq4.txt');
%缺損的值將用nan補全
六、檔案內容存在缺損(2)
較之問題五,問題六的資料成分更加複雜。
例如sq4.txt檔案內容為:
10:21:54,123.1,754,124,57,10/24,a
10:21:56,13,754.5,124,12,57.7,21/54,b
10:21:58,23,754,124.2,12,20/64,
10:21:59,12,754,12,57.8,21/24,a
10:22:01,13,754,12.4,12,57,
10:22:02,12.5,754,124,12,57.6,22/54,b
x=regexp(str1,str2);
其中str1
表示原字串,str2
表示分割標誌符,x
表示匹配到的位置
解決方案:
我們先分析一組資料
10:21:54,123.1,754,124,57,10/24,a
資料格式: 資料1,資料2,資料3,資料4,資料5,資料6,資料7,資料8
分析得知每個資料以逗號隔開,資料內容不限也可能為空,我們就可以以逗號為分割符將資料拆分開,如果相鄰逗號位置相減為1,則該資料為空。
clear;
clc;
data1=
textread
('cs20170704.txt'
,'%s');
%讀取出所有的內容
num=8;
%總共8個資料
data=
cell
(length
(data1)
,num)
;%建立最後的儲存空間
str=
',';
%分割標誌符
for n=1:
length
(data1)
addr=
regexp
(data1
(n),str)
;%找到所有逗號位置
addr=
cell2mat
(addr)
;%regexp返回值為cell型別,此變為mat
data
=data1(1
:addr(1
)-1)
;%資料1 時間不存在缺損,單獨提出來
for m=
2:num-
1%資料2-7
ifaddr
(m)-
addr
(m-1)==
1%相鄰逗號相減為1
data
=nan;
%空 else
data
=data1
(addr
(m-1)+
1:addr
(m)-1)
;%資料非空 (前面逗號-
1)到(後面逗號+
1) end
endif
addr(7
)==length
(data1
)%資料8 最後乙個資料單獨提出來
data
=nan;
%空 else
data
=data1
(addr(7
)+1:end)
;%資料非空
endenddata
matlab如何讀取txt檔案
格式化文字的讀操作 唯讀形式開啟txt檔案 file t fopen mytxt.txt r 以十進位制讀取,且讀取的資料自動排成一列,排的順序為 先從第一行左邊到第一行右邊,然後排第二行 a fscanf file t,d 關閉檔案 fclose file t 使用textscan讀取多列資料 f...
MATLAB 讀取資料txt
任務一 讀取txt中檔案為data myfiles.txt 中的內容如下 this a comment 1,2,3,4 5,6,7,8 9,10,11,12 data1,data2,data3,data4 textread myfiles.txt n n n n delimiter headerli...
matlab 讀取txt檔名稱
格式化文字的讀操作 唯讀形式開啟txt檔案 file t fopen mytxt.txt r 以十進位制讀取,且讀取的資料自動排成一列,排的順序為 先從第一行左邊到第一行右邊,然後排第二行 a fscanf file t,d 關閉檔案 fclose file t 使用textscan讀取多列資料 f...