Matlab中將數據保存為txt或dat格式四種方案


Matlab中將數據保存為txt或dat格式四種方案

 

總結網上各種資源,列出以下的四種方法(以txt為例)。


 

第一種方法:save(最簡單基本的)

具體的命令是:用save *.txt -ascii x

x為變量

*.txt為文件名,該文件存儲於當前工作目錄下,再打開就可以 打開后,數據有可能是以指數形式保存的.

例子:

a =[17 24 1 8 15;23 5 7 14 16 ;4 6 13 20 22 ;10 12 19 21 3 ;11 18 25 2 9 ];

save afile.txt -ascii a; %保存文本文檔的文件名

afile.txt打開之后,是這樣的:

1.7000000e+001 2.4000000e+001 1.0000000e+000 8.0000000e+000 1.5000000e+001

2.3000000e+001 5.0000000e+000 7.0000000e+000 1.4000000e+001 1.6000000e+001

4.0000000e+000 6.0000000e+000 1.3000000e+001 2.0000000e+001 2.2000000e+001

1.0000000e+001 1.2000000e+001 1.9000000e+001 2.1000000e+001 3.0000000e+000

1.1000000e+001 1.8000000e+001 2.5000000e+001 2.0000000e+000 9.0000000e+000

遇到的問題:

Warning: Attempt to write an unsupported data type to an ASCII file.

Variable 'names' not written to file


 

第二種方法:dlmwrite

dlmwrite('a.txt',a,'precision','%10.0f')

或者是dlmwrite('a.txt',a,'delimiter', '\t')

對於只有一行或者一列的數據,很適用,但是多行的,就亂了

網上有很多這一類似的問題,但是都不是很理想

 


 

第三種方法:fopen+fprintf(最常用)

下面主要介紹這種方法,由以下的前兩種情況最終導出第三種情況可以完美的解決以上問題。以上面的例子為例:

  • 第一種情況:

>> a=[17 24 1 8 15;23 5 7 14 16 ;4 6 13 20 22 ;10 12 19 21 3 ;11 18 25 2 9 ];

>> fid = fopen('b.txt','wt');

fprintf(fid,'%g\n',a);       \n 換行

fclose(fid);

 

然后用寫字板打開b.txt,內容如下:為列向量

17

23

4

10

11

24

5

6

12

18

1

7

13

19

25

8

14

20

21

2

15

16

22

3

9

  • 第二種情況:

對上面的命令做一下改動:\n 換行改為\t,table鍵

>> fid = fopen('b.txt','w');

fprintf(fid,'%g\t',a);

fclose(fid);

 

然后用寫字板打開b.txt,內容如下:為行向量:

17 23 4 10 11 24 5 6 12 18 1 7 13 19 25 8 14 20 21 2 15 16 22 3 9 

  • 第三種情況:(最終程序)

綜合上面的兩個情況,我們編寫以下命令:

fid=fopen('b.txt','wt'); %寫入的文件,各函數后面有說明

[m,n]=size(a);

 for i=1:1:m

    for j=1:1:n

       if j==n

         fprintf(fid,'%g\n',a(i,j));

      else

        fprintf(fid,'%g\t',a(i,j));

       end

    end

end

fclose(fid);

然后用寫字板打開b.txt,內容如下:矩陣

17 24 1 8 15

23 5 7 14 16

4 6 13 20 22

10 12 19 21 3

11 18 25 2 9

 

說明:以上操作都是在當前的工作目錄下完成!下面給出最一般的模型,大家可以試着自己操作,如果需要dat格式,直接把txt換為dat就可以:

 

fid=fopen('C:\Documents and Settings\Tname.txt','wt');%寫入文件路徑

matrix=input_mattrix                        %input_matrix為待輸出矩陣

[m,n]=size(matrix);

 for i=1:1:m

   for j=1:1:n

      if j==n

        fprintf(fid,'%g\n',matrix(i,j));

     else

       fprintf(fid,'%g\t',matrix(i,j));

      end

   end

end

fclose(fid);

×××××××××××××××××××××××××××××××××××××××××××××××××××××××××

 

下面附了具體的matlab的fopen和fprintf函數具體解釋,當然help一下是可以知道的,只是為了方便大家

 

matlab中fopen函數在指定文件打開的實例如下:

*1)“fopen”打開文件,賦予文件代號。

    語法1:FID= FOPEN(filename,permission)

用指定的方式打開文件

FID=+N(N是正整數):表示文件打開成功,文件代號是N.

FID=-1            : 表示文件打開不成功。

FID在此次文件關閉前總是有效的。

如以讀方式打開,matlab首先搜索工作目錄,其次搜索matlab的其他目錄,“permission”是打開方式參數。

打開方式參數由以下字符串確定:

r             讀出

w             寫入(文件若不存在,自動創建)

a             后續寫入(文件若不存在,自動創建)

r+            讀出和寫入(文件應已存在)

w+            重新刷新寫入,(文件若不存在,自動創建)

a+            后續寫入(文件若不存在,自動創建))

w             重新寫入,但不自動刷新

a             后續寫入,但不自動刷新

文件的存儲格式:文件打開的默認方式是:二進制。以文本方式打開,可以在方式參

數“permission”中加入“t”文件將,如“rt”,“wt+”

 

matlab中fprintf函數的具體使用方法實例如下:

fprintf函數可以將數據按指定格式寫入到文本文件中。其調用格式為:

數據的格式化輸出:fprintf(fid, format, variables)

  按指定的格式將變量的值輸出到屏幕或指定文件

  fid為文件句柄,若缺省,則輸出到屏幕

    1 for standard output (the screen) or 2 for standard error. If FID is omitted, output goes to the screen.

  format用來指定數據輸出時采用的格式

    %d 整數

    %e 實數:科學計算法形式

    %f 實數:小數形式

    %g 由系統自動選取上述兩種格式之一

    %s 輸出字符串

fprintf(fid,format,A)

說明:fid為文件句柄,指定要寫入數據的文件,format是用來控制所寫數據格式的格式符,與fscanf函數相同,A是用來存放數據的矩陣。

例6.9 創建一個字符矩陣並存入磁盤,再讀出賦值給另一個矩陣。

>> a='string';

>> fid=fopen('d:\char1.txt','w');

>> fprintf(fid,'%s',a);

>> fclose(fid);

>> fid1=fopen('d:\char1.txt','rt');

>> fid1=fopen('d:\char1.txt','rt');

>> b=fscanf(fid1,'%s')

b =

string

matlab讀txt文件

fid=fopen('fx.txt','r');

%得到文件號

[f,count]=fscanf(fid,'%f %f',[12,90]);

%把文件號1的數據讀到f中。其中f是[12 90]的矩陣

%這里'%f %f'表示讀取數據的形勢,他是按原始數據型讀出

fclose(fid);

%關閉文件

另外有的txt文件還可以用load來打開

其語句為

f=load('fx.txt)

 

字符串操作函數

1.        函數eval可以用來執行用字符串表示的表達式

2.        函數deblank可以去掉字符串末尾的所有空格

3.        函數findstr可以用來在長字符串中查找一個短的字符串,並返回相應的位置

4.        函數isstr可以用來判斷變量是否為字符串

5.        函數isletter可以用來判斷字符串中各個元素是否為字母

6.        函數isspace可以用來判斷字符串元素是否為空格符

7.        函數lower和upper可以把字符串中的字母轉為小寫格式和大寫格式

8.        函數strcat可以把多個字符串在水平方向上依次連接起來

9.        函數strvcat可以把多個字符串按豎直方向連接起來

10.     函數strcmp可以用來進行字符串的比較,返回1或0

11.     函數strcmpi可以用來忽略英文字母的大小寫方式比較字符串

12.     函數strncmp可以用來比較字符串前N個字符是否相同

13.     函數strjust可以用來調整字符串矩陣的對齊方式

14.     函數strmatch可以用來尋找和目標字符串匹配的行

15.     函數strrep可以實現字符串的查找和替代功能

16.     函數strtok可以找出字符串第一個空格符前的字符串

17.     函數texlabel可以把字符串轉換成tex軟件的格式

18.     不同進制間的轉換,bin2hex,bin2dec(‘字符串’);dec2hex(數)=字符串;即十進制數不為字符串,      其它進制為字符串

19.     函數bitget可以用來獲取二進制的數位    C=bitget(A,bit),A為一個無符號整形數據

20.     函數bitset可以用來設定某個二進制數位的值      C=bitset(A,bit) 指定數位的數值取反

                                                  C=bitset(A,bit,V)指定數位的數值被V替換

 


 

第四種方法:(數據少了可以)

例如:a=[17 24 1 8 15;23 5 7 14 16 ;4 6 13 20 22 ;10 12 19 21 3 ;11 18 25 2 9 ];

是一個5×5矩陣

    17    24     1     8    15

    23     5     7    14    16

     4     6    13    20    22

    10    12    19    21     3

    11    18    25     2     9

 

fid=fopen('Tname.txt','wt') ;

fprintf(fid,'%8.4f%8.4f%8.4f %8.4f %8.4f \n',a')     %輸出矩陣

fclose(fid)    %關閉文件

 

講一下fprintf命令中每一項的含義:

 

fid    函數句柄,代表之前打開的文件

'%8.4f %8.3f %6.2f\n'      輸出格式,具體如下:

        1、%8.4f 表示輸出格式為浮點數,占用8位(含小數點),保留4位小數

        2、如果是其他%8.3f %6.2f則意義同1

        3、\n表示換行        4、在換行符前給出三個不同的輸出格式表示每行輸出三個數據(當然,三個格式可以一樣,只不過要想每行輸出三個數據必須寫三次),也就是說,換行符前些幾次輸出格式,每行就輸出幾個數據。

 

 

————————————————
參考: https://blog.csdn.net/qing101hua/java/article/details/50618936

 


免責聲明!

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



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