將mat文件中的數據按要求保存到txt文檔中(批處理)


    之前有個老朋友,讓幫忙將一個mat中的數據重新保存到txt中,由於數據比較多需要用到批處理,之前弄過很多次,但每次一到要用的時候總是忘記怎么寫了,現在記錄一下,免得后面老是需要上網搜。這里先說一個比較有意思的matlab函數--dlmwrite,用這個函數將數據導入到txt文件中,其實用save也是可以的,但是這個函數的功能更強大,而且可以按不同的要求導入數據。因為將數據導入到txt中時,需要用逗號分隔,其主要函數格式如下:

1.dlmwrite(filename, M)

   使用默認的分隔符(')將矩陣M寫入ASCII格式的文件中。在目標文件filname中,數據是從第一行的第一列開始寫的。輸入的filename是使用單引號括起來的字符串。

2.dlmwrite(filename, M, 'D') 

  將矩陣M寫入一個ASCII格式的文件中,使用分隔符D來分割矩陣的元素。在目標文件filname中,數據是從第一行的第一列開始寫的。逗號'是默認的分隔符,使用\t來產生制表符分割的文件。

還有不少帶其他參數的格式,大家可以根據自己需要進行百度。

一 需求分析

首先,加載后是一個元胞數組results,里面有一個1*1的結構體,結構體里面放了數據的一些信息,需要導出的是res這個double矩陣里面的數據,如下所示:

 

保存之后的數據用逗號分隔。

二 單個mat數據保存到txt中

如果只是保存一個mat中的數據還是很好做的,用剛才提到的dlmwrite函數就可以很輕松的做到,代碼如下:

clear,clc;

a = load('OPE_Basketball.mat');  
b = a.results;

dlmwrite('res2.txt',b{1,1}.res,'delimiter',',','newline','pc');

  

保存之后的結果如下:

三 批處理導入

用於保存的txt文檔的名字應該跟原mat的名字對應起來,比如basketball.mat導入到txt中后,該txt的名字應該是basketball.txt。因此需要用到dir函數獲取文件夾下的mat文件的名字,代碼如下:

namelist = dir('.\*.mat');

len = length(namelist);
for i = 1:len                 %循環讀取當前文件夾下的.mat文件
    file_name{i}=namelist(i).name;
    a= load(file_name{i});
    
    b = a.results;             %取出其中的數據
    wname = file_name{i};      % 取出mat文件的名字,用於給txt文件命名。  
    wname = ['.\',wname,'.txt']; % 用來保存數據的txt文檔的名字,只能用[],不能直接相加
    dlmwrite(wname,b{1,1}.res,'delimiter',',','newline','pc');   %把數據輸出到txt文件中
    
end

  

其結果是:

 

 數據沒什么問題,但是txt文件的名字有問題,主要是讀取的時候連后綴那些也取出來了,由於前后的字符數都是一樣的,所以將mat文件名取出來的時候可以直接截取中間部分。網上有不少matlab截取字符的函數,這里的話,直接用下標截取是最方便的。代碼如下:

namelist = dir('.\*.mat');

len = length(namelist);
for i = 1:len                 %循環讀取當前文件夾下的.mat文件
    file_name{i}=namelist(i).name;
    a= load(file_name{i});
    
    b = a.results;             %取出其中的數據
    
    wname = file_name{i}(5:end-4); % 取出mat文件的名字,用於給txt文件命名。 取字符串的第五個到倒數第四個子串
    
    wname = ['.\',wname,'.txt']; % 用來保存數據的txt文檔的名字,只能用[],不能直接相加
    dlmwrite(wname,b{1,1}.res,'delimiter',',','newline','pc');   %把數據輸出到txt文件中
    
end

  

現在基本上就沒什么問題了,如下:

 

 

 如果需要將這些txt文檔放在指定文件下,只需要修改一下路徑就可以了,比如:

namelist = dir('.\*.mat');

len = length(namelist);
for i = 1:len                 %循環讀取當前文件夾下的.mat文件
    file_name{i}=namelist(i).name;
    a= load(file_name{i});
    
    b = a.results;             %取出其中的數據
    
    wname = file_name{i}(5:end-4); % 取出mat文件的名字,用於給txt文件命名。 取字符串的第五個到倒數第四個子串
    
    wname = ['.\li\',wname,'.txt']; % 用來保存數據的txt文檔的名字,只能用[],不能直接相加
    dlmwrite(wname,b{1,1}.res,'delimiter',',','newline','pc');   %把數據輸出到txt文件中
    
end

  

結果如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM