Ch 18 jangcs nthu edu tw http www

  • Slides: 48
Download presentation
Ch 18 檔案讀寫 張智星 jang@cs. nthu. edu. tw http: //www. cs. nthu. edu. tw/~jang

Ch 18 檔案讀寫 張智星 jang@cs. nthu. edu. tw http: //www. cs. nthu. edu. tw/~jang 清大資 系 多媒體檢索實驗室

MATLAB 程式設計入門篇:讀寫檔案 高階的檔案讀寫指令 n 先列出常用讀寫檔案指令, 稍後將介紹用法 類別 一般資料 支援檔案格式 指令 MAT - MATLAB workspace

MATLAB 程式設計入門篇:讀寫檔案 高階的檔案讀寫指令 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 程式設計入門篇:讀寫檔案 save n n 儲存計算結果至檔案。 用法: n n 將 X Y Z 三個變數存入filename.

MATLAB 程式設計入門篇:讀寫檔案 save n n 儲存計算結果至檔案。 用法: n n 將 X Y Z 三個變數存入filename. mat save filename X Y Z 將 X Y Z 三個變數存入filename. txt save filename. txt X Y Z -ascii

MATLAB 程式設計入門篇:讀寫檔案 load n n 由檔案讀出數值 用法 n n n load filename. txt –ascii

MATLAB 程式設計入門篇:讀寫檔案 load n n 由檔案讀出數值 用法 n n n load filename. txt –ascii X=filename(: , 1) Y=filename(: , 2) Z=filename(: , 3)

MATLAB 程式設計入門篇:讀寫檔案 save, load 例題: n n n x=1: 10; y=20: 30; z=1: 50;

MATLAB 程式設計入門篇:讀寫檔案 save, load 例題: n n n x=1: 10; y=20: 30; z=1: 50; save test x y z; clear load test

MATLAB 程式設計入門篇:讀寫檔案 save, load 應用 2 n n x=1: 10; y=20: 30; z=1: 50;

MATLAB 程式設計入門篇:讀寫檔案 save, load 應用 2 n n x=1: 10; y=20: 30; z=1: 50; save test. txt x y z -ascii;

MATLAB 程式設計入門篇:讀寫檔案 textread n n 如果檔案資料包含數值及字串,我們就必須 改用 textread 指令 Ex: textread 01. m fprintf('data.

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 程式設計入門篇:讀寫檔案 讀取文字檔 n n n textread 也可以讀取一個文字檔 同時把檔案內的每一列文字變成字串異質陣 列裡面的每一個元素 Ex: textread 03. m

MATLAB 程式設計入門篇:讀寫檔案 讀取文字檔 n n n textread 也可以讀取一個文字檔 同時把檔案內的每一列文字變成字串異質陣 列裡面的每一個元素 Ex: textread 03. m Contents = textread('textread 03. m', '%s', 'delimiter', 'n', 'whitespace', ''); class(contents) % 印出 contents 的資料類別 contents{1} % 列出 contents 第一列 contents{2} % 列出 contents 第二列

MATLAB 程式設計入門篇:讀寫檔案 Fileread n n 若只是要將一個檔案的內容送到一個字串, 可以使用 fileread 指令 Ex: 範例16 -6:fileread 01. m

MATLAB 程式設計入門篇:讀寫檔案 Fileread n n 若只是要將一個檔案的內容送到一個字串, 可以使用 fileread 指令 Ex: 範例16 -6:fileread 01. m out = fileread(‘data 2. txt’); class(out) size(out)

MATLAB 程式設計入門篇:讀寫檔案 Ex: fopen 01. m [fid, message] = fopen('no_such_file', 'r'); fprintf('fid = %dn',

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

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 程式設計入門篇:讀寫檔案 Ex: fscanf 01. m n 有一文字檔 test. txt 如下: 1 4 9

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

MATLAB 程式設計入門篇:讀寫檔案 sscanf n n n sscanf 函數和 fscanf 的功能很類似 sscanf 函數從字串(Strings)中讀取資料 ex:sscanf. 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

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

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 程式設計入門篇:讀寫檔案 Ex: fread 01. m fid = fopen('test 2. txt', 'r'); my. Data

MATLAB 程式設計入門篇:讀寫檔案 Ex: fread 01. m fid = fopen('test 2. txt', 'r'); my. Data = fread(fid); char(my. Data') % 驗證所讀入的資料是否正確 fclose(fid); n Result: This is a test! n n char 可將 my. Data 的整數轉成 ASCII 字元 取 my. Data 的轉制是為了使印出的效果易於閱讀

MATLAB 程式設計入門篇:讀寫檔案 Ex: fread 03. m fid = fopen('test 2. txt', 'r'); 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 的矩陣。 n p. s. 上例中為長度 4的向量

MATLAB 程式設計入門篇:讀寫檔案 Ex: fread 04. m fid = fopen('test 2. txt', 'r'); my. Data

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