數據的導入導出是怎么操作的?
一、save與load函數保存和加載程序數據
基本格式為:
save('FILENAME', 'VARIABLES')
load('FILENAME', 'VARIABLES')
例如,save ('datas.mat','data','x','y','z'); 表示將內存變量data, x, y, z 保存到當前路徑下的datas.mat文件,其它程序若要載入這幾個變量的數據,只需前面路徑下執行load datas;即可。
二、txt文件的導入導出
1. 導入格式一致的數據
例1 現有txt文件如下:
代碼:
x1=load('data1.txt'); %注意設置當前路徑為文件所在路徑
x2=load('data2.txt');
2. 導入有固定分隔符的數據
dlmread('FILENAME', '分隔符', '讀取范圍')
例2讀取txt文件如下(需要跳過前2行的非數據行,或列數不同):
代碼:
x3=dlmread('data3.txt', ',', 2,0) ; %設定讀取的初始位置:2行0列之后的數據
x4=dlmread('data4.txt'); %列數不足用0不齊,load函數讀取將報錯
3. 將矩陣數據寫入指定分隔符的ASCII格式文件
dlmwrite(‘文件名’, ‘數據’, ‘分隔符’, ‘起始行’, ‘起始列’)
dlmwrite(‘文件名’, ‘數據’, '-append')
'-append'表示將矩陣數據寫到文本末尾,若不指定將覆蓋原文本數據。
4. 導入帶表頭的txt或excel數據
importdata(‘文件名’, ‘分隔符’, ‘n’);
將數據存入“結構體”,其中,n表示n行表頭;也可以用來讀入圖片:
x=importdata('tupian.jpg'); image(x);
例3 讀入如下的txt文件:
代碼:
x5=importdata('data5.txt',' ',1); %空格分隔, 第1行是表頭
x5.data %數據
x5.textdata %表頭變量
5. 導入混合格式文本
textscan(fid, 'format', N, 'param', value);
其中,fid為文件句柄;format為讀取格式;N表示用該格式讀取N次數據;'param', value(可選項)指定分隔符和值對。
注意:使用textscan之前,必須先用fopen打開要讀入的文件;函數textread用法類似。
例4 混合格式數據的txt文件如下:
代碼:
fid=fopen('data6.txt','r'); %打開文件句柄
C=textscan(fid, '%s%s%f32%d8%u%f%f%s%f'); %按格式讀入元胞數組C
fclose(fid); %關閉文件句柄
C{1}
C{9}
[names,types,y,answer]=textread('data7.txt','%9c %6s %*f %2d %3s', 1) %讀入固定格式的文件的第一行,忽略其中的浮點值
運行結果:C{1} = 'Sally' 'Joe' 'Bill'
C{9} = 5.1000 + 3.0000i 2.2000 - 0.5000i 3.1000 + 0.1000i
names = Sally Lev
types = 'el1'
y = 45
answer = 'Yes'
三、csv文件導入與導出
csv文件是逗號分隔的txt文件,使用csvread()函數,有3種格式:
csvread('filename', row, col, range)
其中,第一個參數指定文件名;
row和col指定開始讀取位置的行號和列號。注意是從0開始計數,即row=0, col=0表示從文件中第一個數(1, 1)開始讀;
range指定讀取的范圍,range=[R1 C1 R2 C2],表示讀取區域的左上角位置為(R1+1, C1+1),讀取區域的右下角位置為(R2-1, C2-1),且要求row, col等于R1, C1.
注意:csv文件中的空項,讀到矩陣中時,會初始化為0.
四、 Excel文件的導入與導出
1. 導入Excel數據文件
[num, txt, raw] = xlsread('文件名.xls','工作表', '數據范圍')
例5 現有data1.xlsx文件(導入Sheet1的A1至H4數據):
代碼:
[num,txt,raw]=xlsread('data1.xlsx','Sheet1','A1:H4')
%數據返回num;文本返回txt;不處理直接作為元胞返回raw
運行結果:
num =
1 60101 6010101 NaN 0 63 63
2 60101 6010102 NaN 0 73 73
3 60101 6010103 NaN 0 0 0
txt =
'序號' '班名' '學號' '姓名' '平時成績' '期末成績' '總成績' '備注'
'' '' '' '陳亮' '' '' '' ''
'' '' '' '李旭' '' '' '' ''
'' '' '' '劉鵬飛' '' '' '' '缺考'
raw =
'序號' '班名' '學號' '姓名' '平時成績' '期末成績' '總成績' '備注'
[ 1] [60101] [6010101] '陳亮' [ 0] [ 63] [ 63] [ NaN]
[ 2] [60101] [6010102] '李旭' [ 0] [ 73] [ 73] [ NaN]
[ 3] [60101] [6010103] '劉鵬飛' [ 0] [ 0] [ 0] '缺考'
2. 將數據導出到Excel文件
status = xlswrite(‘filename.xls’, ‘數據’, ‘工作表’, ‘指定區域’)
成功返回1,失敗返回0.
例6 將矩陣或元胞數組的數據寫成xls文件
代碼:
A=[12.7 5.02 -98 12; 63.9 0 -0.2 56];
xlswrite('testdata.xls', A)
d={'Time', 'Temp'; 12 98; 13 99; 14 97};
s=xlswrite('tempdata.xls', d, 'Temperatures', 'E1')
%將數據d寫入文件tempdata.xls, Temperatures表,E1起始
例7 讀取數據、處理日期數據,根據日期繪制開盤價變化趨勢圖形。ExpData.xlsx文件如下(部分):
代碼:
[num,txt]=xlsread('ExpData.xlsx');
%讀取excel表格中的數據,數值存入num,文本存入txt
date=txt(2:end,1); %取出日期數據單獨處理
t=datenum(date); %將日期轉化為數值(方便繪圖使用)
date1=datestr(t); %將數值轉化為日期
h=figure %生成空的圖形窗口句柄
set(h,'color','w'); %將圖的背景顏色設為白色
plot(t,num(:,1)); %以日期為橫坐標,開盤價為縱坐標,繪制圖形
%plot(t,num(:,1),'*'); %繪制散點圖
datetick('x',23); %將x軸標注變成日期格式:mm/dd/yyyy
xlabel('日期');
ylabel('開盤價');
運行結果: