日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
c語言fgetl函數(shù),fgetl函數(shù)的用法

怎么將一個文件,在新的tab里打開查看

在編寫一個程序時,經(jīng)常需要從外部讀入數(shù)據(jù),或者將程序運(yùn)行的結(jié)果保存為文件。MATLAB使用多種格式打開和保存數(shù)據(jù)。本章將要介紹 MATLAB中文件的讀寫和數(shù)據(jù)的導(dǎo)入導(dǎo)出。

創(chuàng)新互聯(lián)為企業(yè)提供:品牌網(wǎng)站設(shè)計(jì)、網(wǎng)絡(luò)營銷策劃、重慶小程序開發(fā)、營銷型網(wǎng)站建設(shè)和網(wǎng)站運(yùn)營托管,一站式網(wǎng)絡(luò)營銷整體服務(wù)。實(shí)現(xiàn)不斷獲取潛在客戶之核心目標(biāo),建立了企業(yè)專屬的“全網(wǎng)營銷推廣”,就用不著再為了獲取潛在客戶而苦惱,相反,客戶會主動找您,生意就找上門來了!

13.1 數(shù)據(jù)基本操作

本節(jié)介紹基本的數(shù)據(jù)操作,包括工作區(qū)的保存、導(dǎo)入和文件打開。

13.1.1 文件的存儲

MATLAB支持工作區(qū)的保存。用戶可以將工作區(qū)或工作區(qū)中的變量以文件的形式保存,以備在需要時再次導(dǎo)入。保存工作區(qū)可以通過菜單進(jìn)行,也可以通過命令窗口進(jìn)行。

1. 保存整個工作區(qū)

選擇File菜單中的Save Workspace As…命令,或者單擊工作區(qū)瀏覽器工具欄中的Save,可以將工作區(qū)中的變量保存為MAT文件。

2. 保存工作區(qū)中的變量

在工作區(qū)瀏覽器中,右擊需要保存的變量名,選擇Save As…,將該變量保存為MAT文件。

3. 利用save命令保存

該命令可以保存工作區(qū),或工作區(qū)中任何指定文件。該命令的調(diào)用格式如下:

● save:將工作區(qū)中的所有變量保存在當(dāng)前工作區(qū)中的文件中,文件名為 matlab.mat,MAT文件可以通過load函數(shù)再次導(dǎo)入工作區(qū),MAT函數(shù)可以被不同的機(jī)器導(dǎo)入,甚至可以通過其他的程序調(diào)用。

● save('filename'):將工作區(qū)中的所有變量保存為文件,文件名由filename指定。如果filename中包含路徑,則將文件保存在相應(yīng)目錄下,否則默認(rèn)路徑為當(dāng)前路徑。

● save('filename', 'var1', 'var2', ...):保存指定的變量在 filename 指定的文件中。

● save('filename', '-struct', 's'):保存結(jié)構(gòu)體s中全部域作為單獨(dú)的變量。

● save('filename', '-struct', 's', 'f1', 'f2', ...):保存結(jié)構(gòu)體s中的指定變量。

● save('-regexp', expr1, expr2, ...):通過正則表達(dá)式指定待保存的變量需滿足的條件。

● save('..., 'format'),指定保存文件的格式,格式可以為MAT文件、ASCII文件等。

13.1.2 數(shù)據(jù)導(dǎo)入

MATLAB中導(dǎo)入數(shù)據(jù)通常由函數(shù)load實(shí)現(xiàn),該函數(shù)的用法如下:

● load:如果matlab.mat文件存在,導(dǎo)入matlab.mat中的所有變量,如果不存在,則返回error。

● load filename:將filename中的全部變量導(dǎo)入到工作區(qū)中。

● load filename X Y Z ...:將filename中的變量X、Y、Z等導(dǎo)入到工作區(qū)中,如果是MAT文件,在指定變量時可以使用通配符“*”。

● load filename -regexp expr1 expr2 ...:通過正則表達(dá)式指定需要導(dǎo)入的變量。

● load -ascii filename:無論輸入文件名是否包含有擴(kuò)展名,將其以ASCII格式導(dǎo)入;如果指定的文件不是數(shù)字文本,則返回error。

● load -mat filename:無論輸入文件名是否包含有擴(kuò)展名,將其以mat格式導(dǎo)入;如果指定的文件不是MAT文件,則返回error。

例13-1 將文件matlab.map中的變量導(dǎo)入到工作區(qū)中。

首先應(yīng)用命令whos –file查看該文件中的內(nèi)容:

whos -file matlab.mat

Name Size Bytes Class

A 2x3 48 double array

I_q 415x552x3 687240 uint8 array

ans 1x3 24 double array

num_of_cluster 1x1 8 double array

Grand total is 687250 elements using 687320 bytes

將該文件中的變量導(dǎo)入到工作區(qū)中:

load matlab.mat

該命令執(zhí)行后,可以在工作區(qū)瀏覽器中看見這些變量,如圖13-1所示。

圖13-1 導(dǎo)入變量后的工作區(qū)視圖

接下來用戶可以訪問這些變量。

num_of_cluster

num_of_cluster =

3

MATLAB中,另一個導(dǎo)入數(shù)據(jù)的常用函數(shù)為importdata,該函數(shù)的用法如下:

● importdata('filename'),將filename中的數(shù)據(jù)導(dǎo)入到工作區(qū)中;

● A = importdata('filename'),將filename中的數(shù)據(jù)導(dǎo)入到工作區(qū)中,并保存為變量A;

● importdata('filename','delimiter'),將filename中的數(shù)據(jù)導(dǎo)入到工作區(qū)中,以delimiter指定的符號作為分隔符;

例13-2 從文件中導(dǎo)入數(shù)據(jù)。

imported_data = importdata('matlab.mat')

imported_data =

ans: [1.1813 1.0928 1.6534]

A: [2x3 double]

I_q: [415x552x3 uint8]

num_of_cluster: 3

與load函數(shù)不同,importdata將文件中的數(shù)據(jù)以結(jié)構(gòu)體的方式導(dǎo)入到工作區(qū)中。

13.1.3 文件的打開

MATLAB中可以使用open命令打開各種格式的文件,MATLAB自動根據(jù)文件的擴(kuò)展名選擇相應(yīng)的編輯器。

需要注意的是open('filename.mat')和load('filename.mat')的不同,前者將filename.mat以結(jié)構(gòu)體的方式打開在工作區(qū)中,后者將文件中的變量導(dǎo)入到工作區(qū)中,如果需要訪問其中的內(nèi)容,需要以不同的格式進(jìn)行。

例13-3 open與load的比較。

clear

A = magic(3);

B = rand(3);

save

Saving to: matlab.mat

clear

load('matlab.mat')

A

A =

8 1 6

3 5 7

4 9 2

B

B =

0.9501 0.4860 0.4565

0.2311 0.8913 0.0185

0.6068 0.7621 0.8214

clear

open('matlab.mat')

ans =

A: [3x3 double]

B: [3x3 double]

struc1=ans;

struc1.A

ans =

8 1 6

3 5 7

4 9 2

struc1.B

ans =

0.9501 0.4860 0.4565

0.2311 0.8913 0.0185

0.6068 0.7621 0.8214

13.2 文本文件的讀寫

在上一節(jié)中介紹的函數(shù)和命令主要用于讀寫mat文件,而在應(yīng)用中,需要讀寫更多格式的文件,如文本文件、word文件、xml文件、xls文件、圖像文件和音視頻文件等。本節(jié)介紹文本文件(txt)的讀寫。其他文件的讀寫,用戶可以參考MATLAB幫助文檔。

MATLAB中實(shí)現(xiàn)文本文件讀寫的函數(shù)如表13-1所示。

表13-1 MATLAB中文本文件讀寫函數(shù)

函 數(shù) 功 能

csvread 讀入以逗號分隔的數(shù)據(jù)

csvwrite 將數(shù)據(jù)寫入文件,數(shù)據(jù)間以逗號分隔

dlmread 將以 ASCII 碼分隔的數(shù)值數(shù)據(jù)讀入到矩陣中

dlmwrite 將矩陣數(shù)據(jù)寫入到文件中,以 ASCII 分隔

textread 從文本文件中讀入數(shù)據(jù),將結(jié)果分別保存

textscan 從文本文件中讀入數(shù)據(jù),將結(jié)果保存為單元數(shù)組

下面詳細(xì)介紹這些函數(shù)。

1. csvread、csvwrite

csvread函數(shù)的調(diào)用格式如下:

● M = csvread('filename'),將文件filename中的數(shù)據(jù)讀入,并且保存為M,filename中只能包含數(shù)字,并且數(shù)字之間以逗號分隔。M是一個數(shù)組,行數(shù)與filename的行數(shù)相同,列數(shù)為filename列的最大值,對于元素不足的行,以0補(bǔ)充。

● M = csvread('filename', row, col),讀取文件filename中的數(shù)據(jù),起始行為row,起始列為col,需要注意的是,此時的行列從0開始。

● M = csvread('filename', row, col, range),讀取文件filename 中的數(shù)據(jù),起始行為 row,起始列為col,讀取的數(shù)據(jù)由數(shù)組 range 指定,range 的格式為:[R1 C1 R2 C2],其中R1、C1為讀取區(qū)域左上角的行和列,R2、C2為讀取區(qū)域右下角的行和列。

csvwrite 函數(shù)的調(diào)用格式如下:

● csvwrite('filename',M),將數(shù)組M中的數(shù)據(jù)保存為文件filename,數(shù)據(jù)間以逗號分隔。

● csvwrite('filename',M,row,col),將數(shù)組M中的指定數(shù)據(jù)保存在文件中,數(shù)據(jù)由參數(shù) row和col指定,保存row和col右下角的數(shù)據(jù)。

● csvwrite寫入數(shù)據(jù)時每一行以換行符結(jié)束。另外,該函數(shù)不返回任何值。

這兩個函數(shù)的應(yīng)用見下面的例子。

例13-4 函數(shù)csvread和csvwrite 的應(yīng)用。

本例首先將MATLAB的圖標(biāo)轉(zhuǎn)化為灰度圖,將數(shù)據(jù)存儲在文本文件中,再將其部分讀出,顯示為圖形。

編寫M文件,命名為immatlab.m,內(nèi)容為:

% the example of functions csvread and csvwrite

I_MATLAB= imread('D:\matlab.bmp'); % read in the image

I_MATLAB= rgb2gray(I_matlab); % convert the image to gray image

figure,imshow(I_matlab,'InitialMagnification',100); % show the image

csvwrite('D:\matlab.txt',I_matlab); % write the data into a text file

sub_MATLAB= csvread('D:\matlab.txt',100,100);% read in part of the data

sub_MATLAB= uint8(sub_matlab); % convert the data to uint8

figure,imshow(sub_matlab,'InitialMagnification',100); % show the new image

在命令窗口中運(yùn)行該腳本,輸出圖形如圖13-2所示。

(a) (b)

圖13-2 例13-3 的運(yùn)行結(jié)果

該例中涉及到了少量的圖像處理內(nèi)容,超出本書的范圍,感興趣的讀者可以查閱 MATLAB幫助文檔中關(guān)于Image Processing Toolbox的介紹。

2. dlmread、dlmwrite(個人覺得這個比較好用)

 dlmread函數(shù)用于從文檔中讀入數(shù)據(jù),其功能強(qiáng)于csvread。dlmread的調(diào)用格式如下:

● M = dlmread('filename')

● M = dlmread('filename', delimiter)

● M = dlmread('filename', delimiter, R, C)

● M = dlmread('filename', delimiter, range)

其中參數(shù)delimiter用于指定文件中的分隔符,其他參數(shù)的意義與csvread函數(shù)中參數(shù)的意義相同,這里不再贅述。dlmread函數(shù)與csvread函數(shù)的差別在于,dlmread函數(shù)在讀入數(shù)據(jù)時可以指定分隔符,不指定時默認(rèn)分隔符為逗號。

dlmwrite函數(shù)用于向文檔中寫入數(shù)據(jù),其功能強(qiáng)于csvwrite函數(shù)。dlmwrite函數(shù)的調(diào)用格式為:

● dlmwrite('filename', M),將矩陣M的數(shù)據(jù)寫入文件filename中,以逗號分隔。

● dlmwrite('filename', M, 'D'),將矩陣M的數(shù)據(jù)寫入文件filename中,采用指定的分隔符分隔數(shù)據(jù),如果需要tab鍵,可以用“\t”指定。

● dlmwrite('filename', M, 'D', R, C),指定寫入數(shù)據(jù)的起始位置。

● dlmwrite('filename', M, attribute1, value1, attribute2, value2, ...),指定任意數(shù)目的參數(shù),可以指定的參數(shù)見下表。

● dlmwrite('filename', M, '-append'),如果filename指定的文件存在,在文件后面寫入數(shù)據(jù),不指定時則覆蓋原文件。

● dlmwrite('filename', M, '-append', attribute-value list),敘寫文件,并指定參數(shù)。

● dlmwrite 函數(shù)的可用參數(shù)如表13-2所示。

表13-2 dlmwrite函數(shù)的可用參數(shù)

參 數(shù) 名 功 能

delimiter 用于指定分隔符

newline 用于指定換行符,可以選擇“pc”或者“unix”

roffset 行偏差,指定文件第一行的位置,roffset 的基數(shù)為 0

coffset 列偏差,指定文件第一列的位置,coffset 的基數(shù)為 0

precision 指定精確度,可以指定精確維數(shù),或者采用 c 語言的格式,如“.5f”

3. textread,textscan

當(dāng)文件的格式已知時,可以利用textread函數(shù)和textscan函數(shù)讀入。這里只介紹這兩個函數(shù)應(yīng)用的實(shí)例。

例13-5 通過%讀入文件,按照原有格式讀取。

文件的內(nèi)容為:

Sally Level1 12.34 45 Yes

在命令窗口中輸入:

[names, types, x, y, answer] = textread('D:\mat.txt','%s %s %f %d %s', 1)

得到結(jié)果為:

names =

'Sally'

types =

'Level1'

x =

12.3400

y =

45

answer =

'Yes'

 例13-6 函數(shù)csvread和csvwrite的應(yīng)用

Sally Level1 12.34 45 1.23e10 inf NaN Yes

Joe Level2 23.54 60 9e19 -inf 0.001 No

Bill Level3 34.90 12 2e5 10 100 No

fid = fopen('D:\mat.txt');

C = textscan(fid, '%s %s %f %u %f %f %s');

fclose(fid);

13.3 低級文件I/O

本節(jié)介紹一些基本的文件操作,這些操作如表13-3所示。

表13-3 MATLAB的基本文件操作

函 數(shù) 功 能

fclose 關(guān)閉打開的文件

feof 判斷是否為文件結(jié)尾

ferror 文件輸入輸出中的錯誤查找

fgetl 讀入一行,忽略換行符

fgets 讀入一行,直到換行符

fopen 打開文件,或者獲取打開文件的信息

fprintf 格式化輸入數(shù)據(jù)到文件

fread 從文件中讀取二進(jìn)制數(shù)據(jù)

frewind 將文件的位置指針移至文件開頭位置

fscanf 格式化讀入

fseek 設(shè)置文件位置指針

ftell 文件位置指針

fwrite 向文件中寫入數(shù)據(jù)

下面重點(diǎn)介紹函數(shù)fprintf。該函數(shù)的調(diào)用格式如下:

count = fprintf(fid, format, A, ...),該語句將矩陣A及后面其他參數(shù)中數(shù)字的實(shí)部以 format 指定的格式寫入到fid指定的文件中,返回寫入數(shù)據(jù)的字節(jié)數(shù)。

上面語句中,參數(shù)format由%開頭,共可由4個部分組成,分別如下:

● 標(biāo)記(flag),為可選部分。

● 寬度和精度指示,為可選部分。

● 類型標(biāo)志符,為可選部分。

● 轉(zhuǎn)換字符,為必需部分。

1. 標(biāo)記

標(biāo)記用于控制輸出的對齊方式,可以選擇的內(nèi)容如表13-4所示。

表13-4 標(biāo)記的可選內(nèi)容

函 數(shù) 功 能 示 例

負(fù)號(-) 在參數(shù)左側(cè)進(jìn)行判別 %-5.2d

加號(+) 在數(shù)字前添加符號 %+5.2d

空格 在數(shù)字前插入空格 % 5.2d

0 在數(shù)字前插入0 .2d

2. 寬度和精度指示

用戶可以通過數(shù)字指定輸出數(shù)字的寬度及精度,格式如下:

● o,指定數(shù)字的寬度;

● %6.2f,指定數(shù)字的寬度及精度;

● %.2f,指定數(shù)字的精度。

例13-6 fprintf函數(shù)寬度和精度指示符示例。

在命令窗口中輸入如下命令:

file_type = fopen('D:\type.txt','w');

fprintf(file_h, '%6.2f .8f\n', 1.2, -43.3);

fprintf(file_h, 'o f\n', 1.2, -43.3);

fprintf(file_h, '%.2f %.8f\n', 1.2, -43.3);

fclose(file_h)

ans =

打開該文件,其內(nèi)容為:

1.20 -43.30000000

1.200000 -43.300000

1.20 -43.30000000

從上述結(jié)果可以看出寬度和精度控制的效果。

3. 轉(zhuǎn)換字符

轉(zhuǎn)換字符用于指定輸出的符號,可以選擇的內(nèi)容如表13-5所示。

表13-5 格式化輸出的標(biāo)志符及意義

標(biāo) 志 符 意 義

%c 輸出單個字符

%d 輸出有符號十進(jìn)制數(shù)

%e 采用指數(shù)格式輸出,采用小寫字母 e,如:3.1415e+00

%E 采用指數(shù)格式輸出,采用大寫字母 E,如:3.1415E+00

%f 以定點(diǎn)數(shù)的格式輸出

%g %e及%f的更緊湊的格式,不顯示數(shù)字中無效的 0

%G 與%g相同,但是使用大寫字母E

%i 有符號十進(jìn)制數(shù)

%o 無符號八進(jìn)制數(shù)

%s 輸出字符串

%u 無符號十進(jìn)制數(shù)

%x 十六進(jìn)制數(shù)(使用小寫字母a-f)

%X 十六進(jìn)制數(shù)(使用大寫字母A-F)

 其中 %o、%u、%x、%X支持使用子類型,具體情況這里不再贅述。格式化輸出標(biāo)志符的效果見下面的例子。

例13-7 fprintf 格式化輸出示例。

x = 0:.1:1;

y = [x; exp(x)];

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

fprintf(fid, '%6.2f .8f\n', y);

fclose(fid)

ans =

顯示該文件:

type exp.txt

0.00 1.00000000

0.10 1.10517092

0.90 2.45960311

1.00 2.71828183

例13-9 利用 fprintf 函數(shù)在顯示器上輸出字符串

fprintf(1,'It''s Friday.\n')

It's Friday.

在該例中,利用1表示顯示器,并且用兩個單引號顯示單引號,使用\n進(jìn)行換行。在格式化輸出中,這類符號稱為轉(zhuǎn)義符。MATLAB中的常用轉(zhuǎn)義符如表13-6所示。

表13-6 MATLAB中的常用轉(zhuǎn)義符

轉(zhuǎn) 義 符 功 能

\b 退格

\f 表格填充

\n 換行符

\r回車

\ttab

\\  反斜線

\'' 或 '' 單引號

%%  百分號

13.4 利用界面工具導(dǎo)入數(shù)據(jù)

除前面幾節(jié)介紹的函數(shù)外,也可以通過界面工具將數(shù)據(jù)導(dǎo)入到工作區(qū)中。本節(jié)介紹利用工作區(qū)瀏覽器中的工具導(dǎo)入數(shù)據(jù)。

,

matlab fopen函數(shù)能打開excel數(shù)據(jù)嗎?

matlab的fopen函數(shù)與C語言的fopen函數(shù)的功能是類似的,主要可用于打開文本文件,如下面一段程序用于打開文件'fgetl.m',并逐行讀取,顯示:

fid

=

fopen('fgetl.m');

tline

=

fgetl(fid);

while

ischar(tline)

disp(tline);

tline

=

fgetl(fid);

end

fclose(fid);

fopen不便于獲取excel中的數(shù)據(jù);

若想打開excel文件,并獲取其中的數(shù)據(jù),建議使用xlsread函數(shù),例如:

excel文件

testdata1.xls

包含如下數(shù)據(jù):

1

6

2

7

3

8

4

9

5

10

如想讀出數(shù)據(jù)到matlab中,可使用如下語句:

A

=

xlsread('testdata1.xls')

A

=

1

6

2

7

3

8

4

9

5

10希望對你有幫助,具體可查詢matlab的幫助。

matlab可以調(diào)用的C++保存數(shù)據(jù)為txt怎么寫?謝謝

如果是數(shù)值文件.可以通過

File,Import

Data

進(jìn)行導(dǎo)入.

上面是界面交互的.

當(dāng)然還有底層的

textread

textscan

也有fcanf、fgetl等函數(shù).

C++如果寫出來的數(shù)據(jù)是表格型的數(shù)據(jù),MATLAB直接用load一句解決問題.

如果不是,就用上述的函數(shù)弄,比較麻煩一些。不過基本原理同C語言的文件操作類似。

matlab 怎么讀txt的一部分?jǐn)?shù)據(jù)

印象中,幾個稍微高級文件I/O函數(shù)都不行:

textread可以讀指定的數(shù)據(jù)量,但好像只能從文件的開始讀;

importdata可以跳過指定的行數(shù)開始,但只能讀到文件結(jié)束。

可能需要用低級文件I/O函數(shù):

先fopen,然后通過循環(huán),用fscanf、fgetl、fgets之類的函數(shù)讀數(shù)據(jù),完全自己控制讀文件的過程,想分幾次就分幾次。別忘了最后要flcose哦。

其實(shí)不難,如果用過C語言的低級文件I/O就更容易了,基本上沒區(qū)別。

matlab如何做到只讀txt的一行

fileid是一個整數(shù)文件標(biāo)識符從fopen獲得。 tline是一個文本字符串,除非該行只包含結(jié)束的文件標(biāo)記。在這種情況下,tline是數(shù)字值-1。與fgets讀取字符的編碼方案使用與該文件相關(guān)聯(lián)。要指定的編碼方案,使用fopen。

tline=fgetl(fid)

從文件中讀取行,刪除文件換行符

返回由文件標(biāo)識符fid指示的文件的下一行。如果fgetl遇到文件結(jié)束指示符,則返回-1。對于fid的完整描述請參考fopen函數(shù)。fgetl函數(shù)常用于含有文件換行符的文件。

例如:mm.txt文件內(nèi)容

1 2 2 3

4 5 6

2 5 6 8

265

3

利用 fgetl()讀入時結(jié)果:

c=fgetl(fid)

c =

1 2 2 3

利用fgets()讀入結(jié)果

a=fgets(fid)

a =

1 2 2 3

whos c

Name Size Bytes Class

c 1x7 14 char array

Grand total is 7 elements using 14 bytes

whos a

Name Size Bytes Class

a 1x9 18 char array

Grand total is 9 elements using 18 bytes

當(dāng)利用fread()讀入時,便可以清楚的理解利用fgets()多出來的兩個字符。


當(dāng)前題目:c語言fgetl函數(shù),fgetl函數(shù)的用法
文章轉(zhuǎn)載:http://www.dlmjj.cn/article/hegpjd.html