matlab导入并处理数据:xml、txt、xlsx、csv文件及其批量读取

一、matlab导入并处理xml文件数据

xmlDoc = xmlread('position_sen2_mod1.xml');       %position_sen2_mod1.xml为删除了network.dtd这一行的文件
NodeArray = xmlDoc.getElementsByTagName('node');  %将所有node节点放入数组NodeArray
X_all_pos=zeros(1,NodeArray.getLength-1);      %X_all_pos存储全部节点的x坐标;一共13个有意义的节点,最后一个节点不计入,所以有getLength-1
Y_all_pos=zeros(1,NodeArray.getLength-1);         %Y_all_pos存储全部节点的y坐标;
NodeID_array=cell(1,NodeArray.getLength-1); 
%循环读取节点坐标位置
for i = 0 : NodeArray.getLength-1                 %只取前13个有意义的节点(连/排/班),最后一个节点无意义。循环次数根据要提取的内容做适当修改
    countAttr=0;                                  %countAttr作为想要搜寻的节点属性的index;
    %NodeArray.item(0)对应第i个节点的xml代码部分:<node name="p-1" model="HopRadioNode" mobility="mobile" ignore_questions="true" min_match_score="strict matching">
    %.item(i)对xml代码的每行的多个属性值进行索引;
    thisItem = NodeArray.item(i);                 %NodeArray.item(i)对第i个<node name...>进行索引;将该节点(及其子节点)赋值给ThisItem             
    %提取节点的编号,移动节点:item(0),"true"//item(1):'strict matching'//item(2):'mobile'//item(3):'HopRadioNode'//item(4):'p-1~3','b-1~9'
    %提取节点的编号,固定节点:item(0),"true"//item(1):'strict matching'//item(2):'HopRadioNode'//item(3):'L'
    if i~=3                                       %除了连节点3为固定节点,其余节点均为移动节点   
        NodeID = char(thisItem.getAttributes.item(4).getValue);  %p排节点和b班节点为移动节点,ID属性所在位置为item(4),item()根据想要提取的属性值做适当修改
        NodeID_array{i+1}=NodeID;                                %NodeID_array()存储每一个节点的ID信息
    else                                      
        NodeID = char(thisItem.getAttributes.item(3).getValue);  %L连节点为固定节点,ID属性所在位置为item(3)
        NodeID_array{i+1}=NodeID;                                %%NodeID_array()存储每一个节点的ID信息
    end
    childNode = thisItem.getFirstChild ;           %获取<node name...>的第一个属性子节点:<attr name...>
    while ~isempty(childNode)                      %遍历node的所有子节点,也就是遍历所有attr节点,当属性子节点非空时,进入while循环
        if childNode.getNodeType == childNode.ELEMENT_NODE ;     %检查当前节点没有子节点?【若为0,则跳出if,转入下个childNode节点;若为1,则读取属性子节点】?
       %childNodeNm = char(childNode.getTagName);            %获取当前节点的名字:attr  
          %childNodeData = char(childNode.getFirstChild.getData)             %获取第一个attr节点的数据  
          childAttributes = char(childNode.getAttributes.item(1).getValue);  %得到第一个节点的属性名称thisItem.getFirstchild.getAttributes.item(i);得到属性值 .getvalue
          x=str2double(childAttributes);                                     %将字符串类型数据转化为double型数据
          countAttr=countAttr+1;                                             %由于要提取的第二个属性值y_position在第二个<attr name...>中,所以countAttr+1;根据所要提取的内容可进行适当修改
            if (mod(countAttr,32)==1)      %每一个<node name...>一共有32个<attr name...>; 只需要提取出每个node的第一个属性<attr name='x_position'...>,即x坐标位置,所以用求余函数mod进行条件判断
            x_pos=x;               %将x存进x_pos; x_pos每次循环都会变,主要为了检查;也可以直接注释掉,令X_all_pos(i+1)=x;
            X_all_pos(i+1)=x_pos;
            elseif (mod(countAttr,32)==2)  %只需要提取出每个node的第二个属性<attr name='y_position'...>,即x坐标位置,所以用求余函数mod进行条件判断
            y_pos=x;                       %同上
            Y_all_pos(i+1)=y_pos;
            end
        end  % End IF     
        childNode = childNode.getNextSibling;     % 切换到下一个有效节点 
       %ChildNodeAttributes = char(thisItem.getAttributes.item(j).getValue)
    end  % END WHILE     
end  % END FOR 
end  % END FUNCTION

 二、matlab导入txt 文件数据

%导入txt文件的几种形式
%如果txt文件中均为double类型的数组,下面三种方法均可以用
data1=textread('data.txt')    %可选择性读取:详见:http://blog.sina.com.cn/s/blog_9e67285801010bju.html
data2=load('data.txt')        %只能读取数字
data3=importdata('data.txt')  %可以读取字符串和数字
%如果txt文件中有字符串型数据存在;可以用第三种方法,将数据存储为结构体数据
ban1_sen1_txt3=importdata('班2信息2.txt');

 三、matlab导入.xls;.xlsx 文件数据

批量读取excel文件或者循环读取excel文件

%导入班节点数据
[num_2ban1,~,raw_2ban1]=xlsread('sen2ban1.xlsx');   %num_2ban1只返回数值数据 ,raw_2ban1返回包括字符串的数据
[num_2ban2,~,raw_2ban2]=xlsread('sen2ban2.xlsx');
[num_2ban3,~,raw_2ban3]=xlsread('sen2ban3.xlsx');

 一个xls文件中读取多个Sheet:

[Type Sheet Format]=xlsfinfo('现状OD数据及其他数据.xls');
OD=xlsread('现状OD数据及其他数据.xls',Sheet{1});
Area=xlsread('现状OD数据及其他数据.xls',Sheet{2});

四、matlab导入.csv文件

fid = fopen('D:\can2020-04-02(all12-56).csv','r');
csvdata  = textscan(fid, '%f %d %d %d %d %d %d %s %s %s %s %s %s %s %s','delimiter', ',');
%fid>0表示打开成功,f浮点型,d整数型,s字符串型(实现数据以不同形式导入matlab中)
%读取数据 返回为cell类型 
fclose(fid);
%将数据存储在csvdata中,并保存为cell形式

  

五、matlab批量导入csv文件(也可以将循环中的csv文件替换成其他类型的文件)

%导入数据方式参考:https://blog.csdn.net/zzx2016zzx/article/details/86696313
clc,clear;
s=what;
p=s.path;                       %当前文件夹路径
filename=dir([p,'\','*.csv']);  %拼接路径,读入全部的csv文件的文件名
mydata=cell(1,length(filename));%创建初始文件元胞数组, length(filename)为文件个数
for i=1:length(filename)
%      mydata{i}=xlsread(filename(i).name); %导入xls数据:只适用于数值型数据
        fid = fopen(filename(i).name,'r');  
        csvdata(i,:)= textscan(fid, '%f %d %d %d %d %d %d %s %s %s %s %s %s %s %s','delimiter', ',');   %%fid>0表示打开成功,f浮点型,d整数型,s字符串型(实现数据以不同形式导入matlab中)
        %读取数据 返回为cell类型  length(filename)x15 cell,共15列数字
        fclose(fid);
end

六、数据类型转换命令

1、cell2mat:将cell转换为mat的char型        %整个cell需要为同种类型
2、str2num:将mat从char转换为double型 
3、cellstr:将char转cell 
4、num2str:将double转char 
5、num2cell:将double直接转cell

  

参考资料:

1.https://blog.csdn.net/zzx2016zzx/article/details/86696313 作者:猪猪侠喜欢躲猫猫

2.https://blog.csdn.net/zllljf/article/details/78881081?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight, 作者:需要多喝水的鱼

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值