matlab读写文件操作
文件相对路径
在编码中尽可能使用相对路径:
1、当前路径下,直接:' xxx.bin '
2、在下一级路径下,使用:' .\下一级路径文件名\xxx.bin '
3、在上一级路径下,使用:' ..\xxx.bin '
4、在平行文件夹内,使用:' ..\平行文件夹\xxx.bin '
为生成文件存放至单独的文件夹下
先创建路径,添加路径,最后生成可用路径
mkdir(strcat(url,num2str(idx)));
addpath(strcat(url,num2str(idx)));
dir = strcat(url,num2str(idx));
从excel中读取
[data, txt, raw] = xlsread('data.xlsx');
data为纯数据,字符串部分显示为NaN;txt仅读取字符串部分,数字部分为空白;raw读取所有,但为cell结构
从 txt 中读取内容
1、load —— 读取纯数据文本(没有字母和中文,纯数字);
2、importdata —— 只读取数据,自动忽略数据格式前后的字符,不适合超大文件
test1.txt
“你好
欢迎来到
这个论坛
vib.hit.edu.cn
1 11 111 1111
2 22 222 2222
3 33 333 3333
4 44 444 4444
5 55 555 5555”
[a1,a2,a3,a4]=textread('test1.txt','%s%s%s%s','headerlines',4)
说明:%s可以是其他形式,跟读入的数据类型有关,比如这里也可以用%n,%f等。
这里%s的个数和[a1,a2,a3,a4]对应。
>> [a1,a2,a3,a4]=textread('test1.txt','%s%s%*s%*s') # %*s代表省略后两列数据
a1 =
'1'
'2'
'3'
'4'
'5'
a2 =
'11'
'22'
'33'
'44'
'55'
a3 =
'111'
'222'
'333'
'444'
'555'
a4 =
'1111'
'2222'
'3333'
'4444'
'5555'
因以字符串的形式读入,所以有' '。
3、textread、textscan —— 读取行列规整的文本,会存到元胞中,可通过headerlines省略读取字段名(字符行);
data = textscan(fid,'%s'){1,1};
等同于
data = table2array(textscan(fid,'%s'));
4、csvread、dlmread —— 适合读取csv、xsl等文件格式文本;
5、fprintf、fscanf —— 适合读取复杂的文本(中英文、数字串混杂出现);
中文 数据 英文 混乱如test.txt
你好
1 11 111 1111
欢迎来到
2 22 222 2222
振动论坛
3 33 333 3333
vib.hit.edu.cn
4 44 444 4444
5 55 555 5555
说明:这种内容格式的文件用上面的方法是不行的。
fidin=fopen('test.txt'); % 打开test2.txt文件
fidout=fopen('mkmatlab.txt','w'); % 创建MKMATLAB.txt文件
while ~feof(fidin) % 判断是否为文件末尾
tline=fgetl(fidin); % 从文件读行
if double(tline(1))>=48&&double(tline(1))<=57 % 判断首字符是否是数值
fprintf(fidout,'%s\n\n',tline); % 如果是数字行,把此行数据写入文件MKMATLAB.txt
continue % 如果是非数字继续下一次循环
end
end
fclose(fidout);
MK=importdata('MKMATLAB.txt'); % 将生成的MKMATLAB.txt文件导入工作空间,变量名为MK,实际上它不显示出来
>> MK
MK =
1 11 111 1111
2 22 222 2222
3 33 333 3333
4 44 444 4444
5 55 555 5555
把数组矩阵写入txt文件,并用逗号或空格隔开
1、若需要用,分隔,则下述' '用','替换。
dlmwrite('myfile.txt',A,'delimiter',' ');
2、
fileID = fopen('mafile.txt','w');
fprintf(fileID,'%1d %1d %1d %1d\n',A);
fprintf(fileID,'PBCH_PORTS %d\n',idx);
fprintf(fid,'\n');
fclose(fileID); type('myfile.txt')
循环调用.exe,并给出对应输入参数的路径
如有model.exe,需要给出输入参数的路径:'.\Input\Case0',可按如下方式实现循环:
for idx = 1:length
mycmd = ['model ',strcat(['.\Input\Case',num2str(idx)])];
system(mycmd);
end
一般情况下,也可通过如下方式调用.exe(!文件名 路径)
!model.exe .\Input\Case0
调用exe时, 无法直接得到返回值 。唯一获得运行结果的办法就是让它显示在屏幕上或者存储在文件中
读取.bin文件
url = '文件路径'; % 尽可能使用相对路径
fid = fopen(url , 'rb'); %'r'是在文件存在的情况下,打开读;'r+'是读并写入;'w'是打开写入;'w+'读写;'a'末端添加;'a+'先读后写; 后两种也可在文件不存在的情况下操作,即创建文件。若后加'b'以二进制的形式打开;后加't'以文本形式打开。
fseek(fid , 12 , 'bof'); % 读取文件的指定位置。12为要跳过的字节数,可为正、负、0。即从第13个字节开始读。 'bof'或-1即文件开头;'cof'或0即当前位置;'eof'或1即文件结尾
config = fread(fid , 1 , 'uint32' , 'b'); % 中间数字为按后面的数据类型读取的个数。int32为4字节,int16为2字节,int8为1字节。 'b'为大字节序,即大端在前,二进制数据中的高位;'l'为小字节序,即小端在前,二进制数据中的低位
fwrite(fid,A,'int16','l'); % 若无指定,默认为小字节序
fclose(fid);
% 如422248对应的十六进制为67168,若用'b'的方式即为'00 06 71 68',若用'l'默认的方式即为'68 71 06 00'
把每次循环结果保存为一个文件
for i =1:5
m_ = num2str(i);
n_ = strcat(['.\Input\data\','num_case',m_,'.bin']); % 也可改为 .txt
fid = fopen(n_,'w');
a = 3;
fwrite(fid,a,'int32');
fclose(fid);
end
类似地,如需要输出多个信息时,用([ ])的形式,如:disp (['case ', num2str(idx), 'output' ]);
最新文章
- JS: How to detect my browser version and operating system using JavaScript?
- JS 跳转页面 在新的选项卡打开
- UART接口基本知识
- maven css/js 压缩配置
- sizzle源码分析 (1)sizzle架构
- 读懂IL代码就这么简单 (一)
- 数据库测试DbUnit
- tomcat如何简单调优
- ubuntu(16.04.01)学习-day2--高级命令
- hadoop错误DataXceiver error processing WRITE_BLOCK operation
- linux下修改防火墙端口对外开放方法
- 一种无new创建对象的方法
- [Machine-Learning] 一个线性回归的简单例子
- iOS 常用公共方法
- hdu--1028--Ignatius and the Princess III (母函数)
- matolop画图
- 纯javascript实现可拖住/大小的div
- MD5算法工具类
- eureka服务注册发现流程和核心参数
- 七牛云注册创建oss并配置自定义域名