MATLAB 12 n MAT MATLAB workspace load save
MATLAB 程式設計入門篇:讀寫檔案 高階的檔案讀寫指令(1/2) n 先列出常用讀寫檔案指令, 稍後將介紹用法 類別 一般資料 支援檔案格式 指令 MAT - MATLAB workspace load, save CSV - Comma separated numbers csvread, csvwrite DAT - Formatted text Importdata DLM - Delimited text dlmread, dlmwrite TAB - Tab separated text XLS - Excel worksheet Xlsread WK 1 - Lotus 123 worksheet wk 1 read, wk 1 write 試算表
MATLAB 程式設計入門篇:讀寫檔案 高階的檔案讀寫指令(2/2) 類別 支援檔案格式 指令 CDF - Common Data Format. FITS Flexible cdfread, cdfwrite Image Transport System Fitsread HDF - Hierarchical Data Format hdfread, hdfwrite 電影 AVI - Movie aviread 影像 TIFF, PNG, HDF, BMP, JPEG, GIF, PCX, XWD, CUR, ICO, RAS, PBM, PGM, PPM imread, imwrite AU, SND - Ne. XT/Sun sound auread, auwrite WAV - Microsoft Wave sound wavread, wavwrite 科學資料 音訊
MATLAB 程式設計入門篇:讀寫檔案 textread n n 如果檔案資料包含數值及字串,我們就必須 改用 textread 指令 Ex: textread 01. m fprintf('data. txt 的內容:n'); type data. txt % 列出 data. txt 的內容 [name, hobby, age] = textread('data. txt', '%s%s%d')
MATLAB 程式設計入門篇:讀寫檔案 Ex: fopen 01. m [fid, message] = fopen('no_such_file', 'r'); fprintf('fid = %dn', fid); fprintf('message = %sn', message); fid = -1 message = Sorry. No help in figuring out the problem. . . n n 上例可知當檔案不存在時,回傳的 fid 是 – 1 同時 message 會包含相關的錯誤資訊。
MATLAB 程式設計入門篇:讀寫檔案 Ex: fopen 02. m n 若開啟成功,則傳回的 fid 是一個大於 2 的 整數,而且傳回的 message 是一個空字串, 例如: [fid, message] = fopen('fopen 02. m', 'r'); fprintf('fid = %dn', fid); fprintf('message = %sn', message); fid = 3 message =
MATLAB 程式設計入門篇:讀寫檔案 提示 n n 為了安全起見,最好在每次使用 fopen 時, 都測試其傳回的 fid 是否為有效值。 輸出位置 n n MATLAB 使用 fid=1 來代表「標準輸出( Standard Output) fid=2 代表「標準錯誤輸出」(Standard Error) 若使用fid=1或 2時,可不使用 fopen 來開啟檔案 Try this to see their difference: n n fprintf(1, 'This is standard output!n'); fprintf(2, 'This is standard error!n');
MATLAB 程式設計入門篇:讀寫檔案 應用: 模擬unix的grep指令 n grep : 用來找出包含某一特定字串的一列 function grep(filename, pattern) fid = fopen(filename, 'r'); line_number = 0; while feof(fid) == 0, line = fgetl(fid); matched = findstr(line, pattern); if ~isempty (matched) fprintf('%d: %s n', line_number, line); end line_number = line_number + 1; end fclose(fid);
MATLAB 程式設計入門篇:讀寫檔案 Ex: fscanf 01. m n 有一文字檔 test. txt 如下: 1 4 9 16 25 36 49 64 81 100 欲使用 fscanf 指令讀取其內容,可輸 入如下: n n fid = fopen('test. txt', 'r'); n my. Data = fscanf(fid, '%g'); n fclose(fid); n my. Data % 顯示 my. Data
MATLAB 程式設計入門篇:讀寫檔案 sscanf n n n sscanf 函數和 fscanf 的功能很類似 sscanf 函數從字串(Strings)中讀取資料 ex:sscanf 01. m str = num 2 str([pi, sqrt(2), log 10(3)]) %建立一字串str retrieved = sscanf(str, '%g') %擷取str中的double str = 3. 1416 1. 4142 retrieved = 3. 1416 1. 4142 0. 47712
MATLAB 程式設計入門篇:讀寫檔案 應用: 將平方根表寫入檔案 n Ex: fprintf 01. m x = 1: 10; y = [x; sqrt(x)]; fid = fopen('square. Root. Table. txt', 'w'); fprintf(fid, 'Table of square root: rn'); fprintf(fid, '%2. 0 f => %10. 6 frn', y); fclose(fid); dos('start square. Root. Table. txt'); % 開啟 square. Root. Table. txt
MATLAB 程式設計入門篇:讀寫檔案 sprintf n n n sprintf 函數和 fprintf 函數的功能很類似 sprintf 將資料以字串形式傳回 Ex: >> str = sprintf('log(%f) = %en', 2, log(2)) str = log(2. 000000) = 6. 931472 e-001
MATLAB 程式設計入門篇:讀寫檔案 暫存檔案 欲開啟一暫存檔案,可用 tempname,如下: >> filename = tempname n Result: n filename = C: UsersjangApp. DataLocalTemptpda 998 b 2 b _cb 6 f_4 b 68_9814_6 dbab 1 d 44 abd
MATLAB 程式設計入門篇:讀寫檔案 應用: 產生暫存的 HTML 檔案 n n 以下利用 tempname 產生一個暫存的 HTML 檔案,然後再將此檔案顯示在瀏覽器。 Ex: write. HTML. m filename = [tempname, '. html']; fid = fopen(filename, 'w'); fprintf(fid, '<html><body>n'); fprintf(fid, 'This is a test homepage written by MATLAB!n'); fprintf(fid, '</body></html>'); fclose(fid); dos(['start ', filename]); % 啟動和. html 相連結的應用程式
MATLAB 程式設計入門篇:讀寫檔案 網路檔案的讀取 n n MATLAB 也可以直接讀取網路上的檔案 通常我們是採用 URL(Universal Resource Locator)的方式來指定這些網路上的檔案: n 一般網頁: n n FTP n n http: //www. mathworks. com ftp: //ftp. mathworks. com/pub/pentium/Moler_1. txt 本機硬碟檔案: n file: ///C: winntmatlab. ini
MATLAB 程式設計入門篇:讀寫檔案 urlread n Ex: urlread 01. m contents = urlread('http: //www. cs. nthu. edu. tw/~jang') ; disp(contents); n 上例中使用 urlread 指令來讀取筆者在清華大 學資訊系的首頁,同時將結果指定到字串變 數 contents
MATLAB 程式設計入門篇:讀寫檔案 執行結果 <HTML> <HEAD> <META http-equiv="Refresh" content="0; URL=http: //neural. cs. nthu. edu. tw/jang"> </HEAD> <BODY> The link you just clicked is obsolete. You are being transported automatically to Roger Jang's current homepage at <a href="http: //neural. cs. nthu. edu. tw/jang"> http: //neural. cs. nthu. edu. tw/jang</a>. </BODY> </HTML>
MATLAB 程式設計入門篇:讀寫檔案 Ex: sendmail 01. m to = {'email 1@aaa. bbb. ccc', 'email 2@aaa. bbb. ccc'}; subject = 'Test email from a MATLAB program'; message = 'This is a test email sent via sendmail. '; attachment = {'c: windowsmatlab. ini'}; sendmail(to, subject, message, attachment); n 請將 to 的內容改為你自己本身的電子郵件, 並試著執行一次,以確認此程式碼的正確性。
MATLAB 程式設計入門篇:讀寫檔案 Ex: fread 01. m fid = fopen('test 2. txt', 'r'); my. Data = fread(fid); char(my. Data') % 驗證所讀入的資料是否正確 fclose(fid); n n n Result: This is a test! char 可將 my. Data 的整數轉成 ASCII 字元 取 my. Data 的轉置是為了印出橫列,易於閱讀
MATLAB 程式設計入門篇:讀寫檔案 Ex: fread 03. m fid = fopen('test 2. txt', 'r'); my. Data = fread(fid, [2 3]) fclose(fid); n Result: my. Data = 84 105 32 104 115 105 n 此時 my. Data 為 2 X 3 的矩陣。
MATLAB 程式設計入門篇:讀寫檔案 Ex: fread 04. m fid = fopen('test 2. txt', 'r'); my. Data = fread(fid, 1, 'short') fclose(fid); my. Data 2 = bin 2 dec([dec 2 bin(abs('h'), 8), dec 2 bin(abs('T'), 8)]) n Result: my. Data = 26708 my. Data 2 = 26708
MATLAB 程式設計入門篇:讀寫檔案 frewind n 從 test. txt 的起始位置讀出資料 n 用 frewind 來重設指標的位置: >> frewind(fid); >> A = fscanf(fid, '%g', 5) n Result: A= 1 4 9 16 25
MATLAB 程式設計入門篇:讀寫檔案 ftell n n 傳回現在的指標位置 Ex: ftell 01. m fid = fopen('test. bin', 'w'); count = fwrite(fid, randperm(10), 'int 32'); ftell(fid) ans = 40 n 40 代表指標已在檔案結束位置。
- Slides: 69