matlab数据的导入和导出

从文本文件中导入数据

part1, 使用importdata函数读取格式较为简单的文本文件

%生成测试数据 test1, 该文件仅包含数字,列之间以tab分隔。
xval=0:0.1:10; %数据是一条正弦曲线
yval=sin(xval);

f=fopen('test1.txt','wt');
for i=1:length(xval)
    fprintf(f,'%f\t%f\n',xval(i),yval(i));
end
fclose(f);
% 使用importdata读取test1.txt
data1=importdata('test1.txt');
whos data1 %此时data1是一个double矩阵
testdata=data1;
figure
plot(testdata(:,1),testdata(:,2),'LineWidth',3)
xlabel('x')
ylabel('Sin(x)')
set(gca,'FontSize',16)
saveas(gcf,'test1','fig')
saveas(gcf,'test1','emf')
close(gcf)

在这里插入图片描述

%生成测试数据 test2, 该文件在test1的基础上加入表头
xval=0:0.1:10;
yval=sin(xval);

f=fopen('test2.txt','wt');
fprintf(f,'#x\tsin(x)\n'); % 加入表头
for i=1:length(xval)
    fprintf(f,'%f\t%f\n',xval(i),yval(i));
end
fclose(f);
% 使用importdata读取test2.txt

data2=importdata('test2.txt');
whos data2 %注意!此时data2是一个结构体
testdata=data2.data;
figure
plot(testdata(:,1),testdata(:,2),'LineWidth',3)
xlabel('x')
ylabel('Sin(x)')
set(gca,'FontSize',16)
saveas(gcf,'test2','fig')
saveas(gcf,'test2','emf')
close(gcf)

在这里插入图片描述

part2, 使用fopen 函数读取格式较为复杂的文本文件

%生成测试数据 test3

xval=0:0.1:10;
yval=0:0.1:10;
zval=sin(xval+yval);


f=fopen('test3.txt','wt');
for i=1:length(xval)
    fprintf(f,'%s\t%f\t%s\t%f\t%s\t%f\n','xval:',xval(i),'yval:',yval(i),'zval:',zval(i));
end
fclose(f);
% 使用fopen+regexp读取test3.txt
f=fopen('test3.txt');
data3=zeros(10000,3); %提前分配内存,当数据比较大时非常重要。
p=1;
while ~feof(f) %判断是否到文件结尾
    temp=fgetl(f); %读取一行数据
    S=regexp(temp,'\s+','split'); % 这里使用的时regexp分割字符串的功能
    data3(p,1)=str2double(S{2});  % 将字符串格式改为double格式
    data3(p,2)=str2double(S{4});
    data3(p,3)=str2double(S{6});
    p=p+1;
end

data3=data3(1:p-1,:);
testdata=data3;
figure
plot3(testdata(:,1),testdata(:,2),testdata(:,3),'LineWidth',3)
xlabel('x')
ylabel('y')
zlabel('sin(x+y)')
set(gca,'FontSize',16)
saveas(gcf,'test3','fig')
saveas(gcf,'test3','emf')
close(gcf)

在这里插入图片描述

part3, 使用fopen 函数+ 正则表达式 regexp 读取格式非常复杂的文本文件

%生成测试数据 test4, 这次加入一些随机的无用信息,但是有用的信息总共包含xval, yval, zval 等关键词

xval=0:0.1:10;
yval=0:0.1:10;
zval=sin(xval+yval);
alphabet={'aaffd,','adfb,','gsadc,','a1344,','2b2,','4343,','44c343,','23d5,','++a++,','--e--,'}; % 用于生成随机的无用信息
f=fopen('test4.txt','wt');
for i=1:length(xval)

    numRandominform=randi(4)+4;
    seq=randperm(numRandominform);
    seq=seq(1:3);
    for j=1:numRandominform
        ind=randi(length(alphabet));
        fprintf(f,'%s\t',alphabet{ind});
        if j==seq(1)
            fprintf(f,'%s\t',['xval=',num2str(xval(i)),',']);
        end

        if j==seq(2)
            fprintf(f,'%s\t',['yval=',num2str(yval(i)),',']);
        end

        if j==seq(3)
            fprintf(f,'%s\t',['zval=',num2str(zval(i)),',']);
        end

    end

    fprintf(f,'\n');

end
fclose(f);


% 使用fopen+regexp读取test4.txt
f=fopen('test4.txt');
data4=zeros(10000,3); %提前分配内存,当数据比较大时非常重要。
p=1;
while ~feof(f) %判断是否到文件结尾
    temp=fgetl(f); %读取一行数据
    S=regexp(temp,'xval.*?,','match');  %regexp匹配字符串功能
    data4(p,1)=str2double(S{1}(6:end-1));  % 将字符串格式改为double格式
    S=regexp(temp,'yval.*?,','match');
    data4(p,2)=str2double(S{1}(6:end-1));  % 将字符串格式改为double格式
    S=regexp(temp,'zval.*?,','match');
    data4(p,3)=str2double(S{1}(6:end-1));  % 将字符串格式改为double格式
    p=p+1;
end

data4=data4(1:p-1,:);
testdata=data4;
figure
plot3(testdata(:,1),testdata(:,2),testdata(:,3),'LineWidth',3)
xlabel('x')
ylabel('y')
zlabel('sin(x+y)')
set(gca,'FontSize',16)
saveas(gcf,'test4','fig')
saveas(gcf,'test4','emf')
close(gcf)

在这里插入图片描述

从EXCEL中导入数据

% 方法一:直接在matlab当前文件夹中双击要打开的excel文件,然后框定excel页面和导入数据范围,
% 最后选择导入数据的格式和变量名称即可。

% 方法二:使用xlsread函数
data5=xlsread('test5.xlsx',1);
whos data5   % 注意观察此时data5的格式

在这里插入图片描述

data5_2=xlsread('test5.xlsx',2);
whos data5_2   % 注意观察此时data5的格式

在这里插入图片描述

导入图片数据

data6=imread('数学建模公会.png');
whos data6    % 这是一个rgb图片

imshow(data6)

% 可以操作rgb对应的数据修改图片,例如:
data6(:,:,1)=data6(:,:,1)/2;
imshow(data6)

在这里插入图片描述

获取代码文件或想了解更多内容,请关注公众号:数学建模公会
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值