1、readtable和writetable
A.读取文件保存为表readtable
readtable 基于文件的扩展名确定文件格式:
①.txt、.dat 或 .csv(带分隔符的文本文件)
②.xls、.xlsb、.xlsm、.xlsx、.xltm、.xltx 或 .ods(电子表格文件)
③.xml(可扩展标记语言 (XML) 文件)
④.docx(Microsoft® Word 文档文件)
⑤.html、.xhtml 或 .htm(超文本标记语言 (HTML) 文件
T = readtable(filename)
T = readtable(filename,opts)
T = readtable(___,Name,Value)
B.将表写入文件writetable
writetable 根据指定扩展名确定文件格式。扩展名必须是下列格式之一:
①.txt、.dat 或 .csv(适用于带分隔符的文本文件)
②.xls、.xlsm 或 .xlsx(适用于 Excel® 电子表格文件)
③.xlsb(适用于安装了 Windows® Excel 的系统上支持的 Excel 电子表格文件)
④.xml(适用于可扩展标记语言 (XML) 文件)
writetable(T)
writetable(T,filename)
writetable(___,Name,Value)
一、txt
(1)load() (2)importdata() (3)txtread()
(1)load()
load函数适合读取纯数据文本
0 1.000000 2.000000 3.000000
1 3.000000 4.000000 5.000000
2 6.000000 7.000000 8.000000
3 9.000000 10.00000 11.00000
%对于类似的txt文件,不含有字符,只有数字
data=load(‘data_txt.txt’);
x=data(:,1);
y=data(:,2);
plot(x,y,‘r–’)
(2)importdata()
只是第一行有字符,则使用importdata可直接读取数据。importdata函数只读取数据,自动省略数据格式前后的字符。
eg:
i co c1 c2
0 1.000000 1.000000 1.000000
1 3.000000 4.000000 5.000000
2 5.000000 7.000000 9.000000
3 7.000000 10.00000 13.00000
clear all;
close all;
clc
%只是第一行有字符,则使用importdata可直接读取数据
data1=importdata('F:\F桌面文件\data_txt_string.txt');
data2=data1.data; %若没有这一步,出不出来图。
x=data2(:,1);
y1=data2(:,2);
y2=data2(:,3);
y3=data2(:,4);
plot(x,y1,'r--',x,y2,'bo',x,y3,'ks');
①打开文件
在读写文件之前,必须先用fopen函数打开或创建文件,并指定对该文件进行的操作方式。fopen函数的调用格式为:
fid=fopen(文件名,‘打开方式’)
‘r’:只读方式打开文件(默认的方式),该文件必须已存在。
‘r+’:读写方式打开文件,打开后先读后写。该文件必须已存在。
‘w’:打开后写入数据。该文件已存在则更新;不存在则创建。
‘w+’:读写方式打开文件。先读后写。该文件已存在则更新;不存在则创建。
‘a’:在打开的文件末端添加数据。文件不存在则创建。
‘a+’:打开文件后,先读入数据再添加数据。文件不存在则创建。
②关闭文件
文件在进行完读、写等操作后,应及时关闭,以免数据丢失。关闭文件用fclose函数,调用格式为:
sta=fclose(fid)
说明:该函数关闭fid所表示的文件。sta表示关闭文件操作的返回代码,若关闭成功,返回0,否则返回-1。如果要关闭所有已打开的文件用fclose(‘all’)。
(3)textread函数
textread、textscan——适合读取行列规整的文本,会存到元胞中,可通过headerlines省略读取字段名(字符行);
①读取开头带字符注释,数据有分隔符(逗号,分号…)的数据
11.txt
1, 2, 3, 4
5, 6, 7, 8
9, 10, 11, 12
[a1,a2,a3,a4]=textread('11.txt','%d%d%d%d','delimiter', ',','headerlines',1);
%{
delimiter是指出分隔符,读数据的时候会自动跳过分隔符;
headerlines指明了跳过几行,这里headerlines告诉textread跳过一开始的1行;
format用来控制读取的数据格式,由%加上格式符组成;
常见的格式符有:d(整型)、f(浮点型)、s(字符串型)、c(字符型)等;
%}
② txt中存在空位,用nan替代为空的部分
11.txt
1,2,3,4,,6
7,8,9,,11,12
>>[d1 d2 d3 d4 d5 d6] = textread('11.txt','%f%f%f%f%f%f','headerlines',1, 'delimiter', ',', 'emptyvalue', NaN)
>> data=[d1 d2 d3 d4 d5 d];
>> data
data =
1 2 3 4 NaN 6
7 8 9 NaN 11 12
③txt文件包含不同格式数据
11.txt
Sally Start 12.34 56 End
Sall Star 12.3 5 En
[name, types, x, y, answer] = textread('11.txt' , '%s%s%f%d%s', 3);
%注意“3”为读取次数,应该是要读取的行数,即读取11.txt 3行数据。
%这里没有设置跳行headerlines,读取结果为3*1的cell,“11.txt"会读取保存在name中,
④读入规律格式的数据
11.txt
Location;date;discharge
Lobith;1989-01-01;00:00;2801
Lobith;1989-01-02;00:00;2619
>> [loc year month day hour min charge]=textread('11.txt','%s%f-%f-%f%f:%f%f','headerlines',2,'delimiter',';')
loc =
'Lobith'
'Lobith'
year =
1989
1989
month =
1
1
day =
1
2
hour =
0
0
min =
0
0
charge =
2801
2619
二、CSV
1,实用csvread()函数
(1)M = csvread('filename')
直接输入文件名,将数据读到矩阵M中。
这里要求csv文件中只能包含数字。
(2)M = csvread('filename', row, col)
除了文件名,还指定了开始读取位置的行号(row)和列号(col)。这里,行号、列号以0开始计数。也就是说,row=0, col=0表示从文件中第一个数开始读。
(3)M = csvread('filename', row, col, range)
range限定了读取的范围。range = [R1 C1 R2 C2],这里(R1,C1)是读取区域的左上角,(R2,C2)是读取区域的右下角。在使用这种方法时,要求row, col等于range中的前两项。
注意:matlab认为CSV第1行第1列的单元格坐标为(0,0)
给定一个csvlist.csv文件,其内容如下
02, 04, 06, 08, 10, 12
03, 06, 09, 12, 15, 18
05, 10, 15, 20, 25, 30
07, 14, 21, 28, 35, 42
11, 22, 33, 44, 55, 66
① 读取整个文件
csvread(‘csvlist.csv’)
ans =
2 4 6 8 10 12
3 6 9 12 15 18
5 10 15 20 25 30
7 14 21 28 35 42
11 22 33 44 55 66
② 读取第2行以下,第0列以右区域的数据
m = csvread(‘csvlist.dat’, 2, 0)
m =
5 10 15 20 25 30
7 14 21 28 35 42
11 22 33 44 55 66
③
读取第2行以下,第0列以右,第3行以上,第3列以左区域的数据
m = csvread(‘csvlist.dat’, 2, 0, [2,0,3,3])
m =
5 10 15 20
7 14 21 28
2、textscan函数
在使用textscan函数前必须用fopen函数打开CSV文件。textscan函数读取的结果会存在cell数组中;
带文本的csv文件使用textscan读取;
3、readtable
T = readtable(filename)
T = readtable(filename,opts)
T = readtable(___,Name,Value)
readtable 基于文件的扩展名确定文件格式:
.txt、.dat 或 .csv(适用于带分隔符的文本文件)
.xls、.xlsb、.xlsm、.xlsx、.xltm、.xltx 或 .ods(适用于电子表格文件)
三、nc文件
1、①查看该nc文件的基本信息
nc_file = "1.nc"
ncdisp(nc_file)
%显示nc文件信息,包括变量、维度和属性信息
ncdisp(ncFilePath);%显示nc文件的所有结构,以便大概了解里面的内容
ncdisp(ncFilePath,'evap');%显示指定变量的内容,注意一定要是变量variables才可以
ncdisp(ncFilePath,'/','min');%简单显示结构以及定义
ncdisp(ncFilePath,'/','full');%全部显示所有结构和定义信息
②根据上一步中nc文件的基本信息提取nc文件的相应数据:
time=ncread('E:\**\**.nc','time')
③将nc文件中所需要的数据保存至txt文档
首先,将所需要的数据提取出来:
start=[125,89,123]
count=[17,14,124]
tmax=ncread('E:\**\**.nc','tmax',start,count)
其中,start 表示开始读取数据的地方,本例即从第125行89列123页开始读取;
count 表示要读取的个数,本例即为要读取17行14列124页;
本例默认步长为1,故未添加 stride。
fid=fopen('E:\**\***.txt','w')
fprintf(fid,'%g\n',tmax(1,1,k))
④
sst= ncread(source1,'sst'); %温度,三维
time=ncread(source1,'time'); %时间,一维
sst2 =sst(6,17,:); %确定时间的两个维度 (经lon,纬lat,时间从始到终)
sst2=sst2(:); %转换成一维,方便结合时间做出二维图像
%plot(time,sst2); %做出全部时间-温度二维图
plot(time(1:100),sst2(1:100)); %做出区间时间-温度二维图
2、ncinfo
info = ncinfo('D:\DATA\data.nc'); %读取nc文件信息
nc_var = ncread('D:\DATA\data.nc','SIF'); %读取nc文件中‘SIF’变量,具体读取什么变量自己修改。