c fscanf 按行读取文件_教程合集 | MATLAB文件读写(以nc与txt为例)

469a7ac158f8cd108bddaadf1430e496.gif

    周一到!我们又和大家见面啦!最近几周的主题是,有了数据,那我们怎么读写数据文件呢?气象中的特殊资料又有哪些处理方法呢?以txt和nc文件做引子,欢迎各位拍砖~

No.1

基础通用知识

    读写文件时有一些由c语言衍生出来的读取数据的相关知识,它们大都是相通的。

1.1  文件打开模式

读取数据第一步!先打开一个数据文件。文件可以根据自己需要的不同,通过单个或组合使用以下符号的方式,在代码中使用。

打开模式

执行操作

'r'

以只读方式打开文件(默认)

'w'    

以写入的方式打开文件,会覆盖已存在的文件

'x'

如果文件已经存在,使用此模式打开将引发异常

'a'

以写入模式打开,如果文件存在,则在末尾追加写入

'b'

以二进制模式打开文件

't'

以文本模式打开(默认)

'+'

可读写模式(可添加到其他模式中使用)

'U'

通用换行符支持

    例如,小明想以二进制的形式打开一个已存在的文件,在读入数据后,在文件中再持续写入数据,则查一查表中相对应的符号,他可以:

f = fopen('write_data.txt','ab+')

1.2   格式化文本

 在将处理好的数据输出为其他格式的文件时,尤其要注意文件的写法。

    要将数据转换为文本输出并控制其格式,可以将格式化操作符与常见的转换函数(如 num2str 、sprintf)结合使用。这些操作符可控制记数法、对齐方式、有效位数以及其他内容。其典型用途包括用于显示和输出文件的文本。

转换说明符:

 占位符,它会被后面表达式(变量、常量、数字、字符串、加减乘除等各种形式)的值代替。

符   号

说     明

%c

格式化字符及其ASCII码

%s

格式化字符串

%d

格式化整数

%o

格式化无符号八进制数

%x

格式化无符号十六进制数

%X

格式化无符号十六进制数(大写)

%f

格式化定点数,可指定小数点后的精度

%e

用科学计数法格式化定点数

%E

作用同%e,用科学计数法格式化定点数

%g 

根据值的大小决定使用%f或者%e

%G

作用同%g,根据值的大小决定使用%F或者%E

如果没有子类型字段,转换字符 %o、%x、%X 和 %u 会将输入数据按整数进行处理。要将输入数据按浮点值进行处理,并将它们转换为八进制、十进制或十六进制表示形式,请使用:

b

输入数据为双精度浮点值,而不是无符号整数。例如,要以十六进制格式输出双精度值,请使用类似 %bx 的格式。

t

输入数据为单精度浮点值,而不是无符号整数。

精度字符宽度设置:

    例如,在操作符%7.2f 中,7表示字段宽度,2表示精度。综合本部分前述内容,对圆周率pi进行格式转换:

txt = sprintf('%7.2f',pi)

得到结果:

5abe573e8cd093f4f31ef38b2d0a6ab7.png

标志

可选项,用于控制输出文本的其他格式:

字符

说明

示例

减号 (-)

在字段中左对齐转换后的参数。

%-5.2d

加号 (+)  

对于数值,始终输出前导的符号字符(+ 或 -)。

对于文本值,在字段中右对齐转换后的参数。

%+5.2d

%+5s

空格

在值之前插入空格。   

 % 5.2f

零 (0)

用零而不是空格进行填充。

%05.2f

井号 (#)

改选定的数值转换:    

· 对于 %o、%x 或 %X,将输出 0、0x 或 0X 前缀。

·对于 %f、%e 或 %E,即使精度为零也将输出小数点。

· 对于 %g 或 %G,不删除尾随零或小数点。

%#5.0f

    除此之外,实际编程中还常用转义字符控制输出文件的格式:\n为换行符,\t为水平制表符,表示同一行中的间隔,与一般打字时使用的Tap键功能类似。

No.2

txt文件的读写

    你可能用到的函数:fopen、fwrite、fread、fscanf、importdata、load、save、textread等。(csv、xls等文件的读取方式均有类似的特殊函数,可用搜索引擎或MATLAB官网文档查阅~)

读写方法一:

load('file.txt','r')save('filename.txt',a)%a为需储存的变量名

读写方法二:

fid = fopen('filename.txt')[A,COUNT]=fscanf(fid,format,size)

其中A用来存放读取的数据,COUNT返回所读取的数据元素个数,fid为文件句柄,format用来控制读取的数据格式,size为可选项,决定矩阵A中数据的排列形式,它可以取下列值:N(读取N个元素到一个列向量)、inf(读取整个文件)、[M,N](读数据到M×N的矩阵中,数据按列存放)

fprintf函数可以将数据按指定格式写入到文本文件中。其调用格式为:

fprintf(fid,format,A)fcolse(fid) %最后不要忘记关闭文件

读取方法三:

[A,B,C,…] = textread(filename,format,N)

括号中变量的个数必须和format中定义的个数相同。如果每N行相同格式的数据,可采用[A,B,C,…] = textread(filename,format,N)的语法,读取N次。

[C,position] = textscan(fid, 'format', N, 'param', value)

在扫描结束时返回文件或字符向量中的位置作为第二个输出参数。对于文件,该值等同于调用 textscan 后再运行 ftell(fileID) 所返回的值。对于字符向量,position 指示 textscan 读取了多少个字符

A = importdata(filename)

No.3

nc文件的读写

读入:

A=ncread('filename.nc','Name',[1 1 1 1],[X Y 1 1]);%[1 1 1 1]为起始位置,X、Y为读取终点位置。

写入:

在写入nc文件时,要尤其注意在自己定义各项变量名、变量属性后再给变量进行赋值操作:

例如论坛里小伙伴threetee给出的示例截取(原贴链接在后方):

varid2 = netcdf.defVar(ncid,'lat','double',[dimidx]);%定义新变量netcdf.putAtt(ncid,varid2,'long_name','Latitude');%设定变量属性netcdf.endDef(ncid);netcdf.putVar(ncid,varid2,lat);%给新变量赋值netcdf.close(ncid);

    也可以用read_grib工具包进行读写,在这里就不过多展开了,感兴趣的小伙伴可以去气象家园里自行探索:

http://bbs.06climate.com/forum.php?mod=viewthread&tid=47599

其他关于nc文件读写的讨论如下:

NC文件读取教学(某一经纬度范围):(drx)

http://bbs.06climate.com/forum.php?mod=viewthread&tid=89683

分享一个用MATLAB将数据写nc格式文件的程序:(threetee)

http://bbs.06climate.com/forum.php?mod=viewthread&tid=28875

MATLAB批量读取nc文件,并进行数据处理,绘图:(吴东佑)

http://bbs.06climate.com/forum.php?mod=viewthread&tid=52026

关于MATLAB读取nc数据并绘制风场:(zhangxk14)

http://bbs.06climate.com/forum.php?mod=viewthread&tid=94405

nc数据全解读-3 数据处理:月数据变季度数据,年数据,数据标准化:(652554221)

http://bbs.06climate.com/forum.php?mod=viewthread&tid=95001

用MATLAB读取和编写nc文件:(是兜兜啊)

http://bbs.06climate.com/forum.php?mod=viewthread&tid=94319

nc文件与对应头文件的生成:(容与)

http://bbs.06climate.com/forum.php?mod=viewthread&tid=37866

 !!手把手教会!!读取nc文件变量到excel,再输出数据合成nc:(叮当卖卖猫)

http://bbs.06climate.com/forum.php?mod=viewthread&tid=47365

No.4

关于读写文件的其他讨论

其他部分文件读写方法见下方链接内的论坛讨论:

微信不能添加外部超链接,请复制链接至浏览器食用!

660b8d815036129af2f37815390ca239.gif

关于用MATLAB一站式读取NetCDF, OPeNDAP, HDF5, GRIB, GRIB2, HDF4等等:

http://bbs.06climate.com/forum.php?mod=viewthread&tid=47599

MATLAB对于文本文件(txt)数据读取的技巧总结:

http://bbs.06climate.com/forum.php?mod=viewthread&tid=626

MATLAB读取grads数据的函数:(firenix)

http://bbs.06climate.com/forum.php?mod=viewthread&tid=54519

MATLAB处理后的数据写为二进制用于GrADS画图——fwrite函数使用:(Aires)

http://bbs.06climate.com/forum.php?mod=viewthread&tid=20308

MATLAB数据转grads格点数据函数:(斥鷃)

http://bbs.06climate.com/forum.php?mod=viewthread&tid=12711

分享一个自己编的关于cmip5数据提取以及插值的程序:(lancerv8)

http://bbs.06climate.com/forum.php?mod=viewthread&tid=53380

MATLAB读取卫星hdf数据步骤总结:(windprofiler)

http://bbs.06climate.com/forum.php?mod=viewthread&tid=10454

MATLAB读取SA雷达基数据文件并进行显示:(又是那隻貓)

http://bbs.06climate.com/forum.php?mod=viewthread&tid=14628

MATLAB自动读取micaps数据并存储为结构数组程序:(雪お轩漠)

http://bbs.06climate.com/forum.php?mod=viewthread&tid=28016

MATLAB读取MICAPS数据源程序:(雪お轩漠)

http://bbs.06climate.com/forum.php?mod=viewthread&tid=31259

读取MICAPS tlogp格式数据:(daveryjl)

http://bbs.06climate.com/forum.php?mod=viewthread&tid=89801

分享一个读取.he5文件并画图的例子:(大物小子)

http://bbs.06climate.com/forum.php?mod=viewthread&tid=95949

MATLAB读取AWX文件(TBB):(二爷名声在外)

http://bbs.06climate.com/forum.php?mod=viewthread&tid=51535

利用MATLAB提取图图片中的数据:

http://bbs.06climate.com/forum.php?mod=viewthread&tid=5784

参考资料:

[1]MATLAB官网字符串格式化部分:https://ww2.mathworks.cn/help/matlab/matlab_prog/formatting-strings.html

[2]小甲鱼教程:https://fishc.com.cn/

6f1e2c0951099663a354478d9a04963d.gif

本期内容到此结束!意犹未尽?

欢迎到家园MATLAB板块,一起玩耍吧!

http://bbs.06climate.com/

排版:自古以来没头发

1f3dde2fcf2d3302f65d639102e41a6c.gif

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值