關於MATLAB讀取txt檔案的方法

2021-09-29 22:47:25 字數 4732 閱讀 5040

ilovematlab論壇最常見的問題top200

一、如何讀取乙個文件下,多個txt檔案?

一般讀取的檔案,命名都具有一定的規律,除去相同部分,剩下的變化按照時間、序號、某一特定的標誌符等進行排列。

下面我們舉個例子來操作。

假如資料夾裡存在以下檔案:

cs20170701

cs20170702

cs20170703

cs20170704

…cs20170731

標籤:cs代表產品型別,數字代表年月日。總共31個檔案

意義:整個生產部門在2023年7月份的生產記錄表

分析內容:首先我們觀察所有的檔案,它們具有相同部分:產品型別和年月,變化的部分只有日子數,那麼,我們就可以使用乙個迴圈來讀取所有的txt檔案,且儲存得有規律。

參考函式:loadtextreadnum2str

解決方案:

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、數字處理。

參考函式:textreadimportdata

解決方案:

%方案一

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...